2010-11-18 22 views
8

Was die C# Äquivalent der folgenden C-Code ist:(c = getchar())! = EOF in C#?

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

Ich weiß getchar() und putchar() werden durch Console.Read und Console.Write bzw. ersetzt werden, aber was ist mit dem EOF. Vor allem im Hinterkopf, C# arbeitet mit Unicode und C mit ASCII, was bedeutet das?

+0

Haben Sie die Dokumentation für Console.Read überprüft? http://msdn.microsoft.com/en-us/library/system.console.read.aspx –

Antwort

8

gibt -1 auf EOF zurück (EOF wird auf den meisten Plattformen als -1 definiert).

können Sie tun:

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

auch C# nativ mit UNICODE in der gleichen Art und Weise funktioniert, dass C nativ mit ASCII arbeitet, das heißt es nicht mehr Implikationen sind. System.Char stellt einen UCS-2UNICODE Zeichen dar, der auch in einen int passt, damit alles in Ordnung ist.

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

Also gibt es kein echtes Äquivalent von C EOF in C# ?? – Fahad

+2

Was ist mit dem Aufruf von WriteLine? Und warum schreibst du Zahlen? –

+2

@Fahad: Das reale Äquivalent ist der konstante Wert -1. Dies ist der dokumentierte Rückgabewert, wenn Sie nicht mehr zu lesen haben. –

3

Aus der Spitze von meinem Kopf,

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

Offenbar Read() -1 zurück, wenn es nichts mehr zu lesen ist. Ich sehe keine EOF-Konstante definiert. Ich könnte geneigt sein, >= 0 anstelle von != -1 sogar zu verwenden.

Ich glaube nicht, ANSI vs Unicode macht einen Unterschied - Sie lesen eine Nummer von einem API-Aufruf und füttern es in den anderen. Sie können Unicode auch in C verwenden.

+0

Wissen Sie, was passiert, wenn Sie 'Console.Out.Write (int)' aufrufen? –

+0

@Lasse D'oh, guter Punkt. Behoben (hoffentlich) – Rup