2010-11-18 22 views
8

Co to jest C# równoważne z następującego kodu C:(c = getchar())! = EOF w C#?

while((c = getchar())!= EOF) 
    putchar(c); 

wiem getchar() i putchar() zostaną zastąpione przez Console.Read i Console.Write odpowiednio ale co z EOF. Szczególnie mając na uwadze, C# działa z unicode i C z ASCII, jakie są tego skutki?

+0

Czy sprawdziłeś dokumentację Console.Read? http://msdn.microsoft.com/en-us/library/system.console.read.aspx –

Odpowiedz

8

zwraca -1 na EOF (przypadkowo EOF jest zdefiniowany jako -1 na większości platform).

można zrobić:

int c; 
while ((c = Console.Read()) != -1) { 
    Console.Write(Convert.ToChar(c)); 
} 

także, C# działa natywnie z UNICODE w taki sam sposób, że C działa natywnie z ASCII, to znaczy nie ma więcej implikacje. System.Char reprezentuje znak UCS-2UNICODE, który również pasuje do int, więc wszystko będzie w porządku.

1
 int c = -1; 
     while ((c =Console.Read()) >=0) 
     { 
      Console.WriteLine(c); 
     } 
+0

Więc nie ma prawdziwego odpowiednika C EOF w C# ?? – Fahad

+2

Co oznacza połączenie z WriteLine? I dlaczego piszesz liczby? –

+2

@Fahad: rzeczywistym odpowiednikiem jest stała wartość -1. Jest to udokumentowana wartość zwracana, gdy nie masz więcej do przeczytania. –

3

Off szczycie mojej głowy,

int c; // N.B. not char 
while((c = Console.In.Read()) != -1) 
    Console.Out.Write((char)c); 

Widocznie Read() zwraca -1 jeśli nie ma nic więcej do czytania. Nie widzę stałej stałej EOF. Być może jestem skłonny użyć nawet >= 0 zamiast != -1.

Nie sądzę, że ANSI vs Unicode ma jakąkolwiek różnicę - czytasz numer z jednego wywołania API i podajesz je do drugiego. Możesz również użyć Unicode w C.

+0

Czy wiesz, co się stanie, jeśli wywołasz 'Console.Out.Write (int)'? –

+0

@Lasse D'oh, dobry punkt. Naprawiono (miejmy nadzieję) – Rup