2010-11-18 10 views
8

Qual è il C# equivalente del seguente codice C:(c = getchar())! = EOF in C#?

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

So getchar() e putchar() stanno per essere sostituito da Console.Read e Console.Write rispettivamente ma per quanto riguarda l'EOF. Soprattutto tenendo a mente, C# funziona con Unicode e C con ASCII, quali sono le implicazioni di ciò ??

+0

Hai controllato la documentazione per Console.Read? http://msdn.microsoft.com/en-us/library/system.console.read.aspx –

risposta

8

Console.Read() restituisce -1 su EOF (coincidenza, EOF è definito come -1 sulla maggior parte delle piattaforme).

si può fare:

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

Inoltre, C# funziona in modo nativo con UNICODE nello stesso modo in cui C funziona in modo nativo con ASCII, vale a dire non ci sono più implicazioni. System.Char rappresenta un UCS-2UNICODE carattere, che si adatta anche a un int, quindi tutto andrà bene.

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

Quindi non esiste un vero equivalente di EOF di C in C# ?? – Fahad

+2

Che cos'è la chiamata a WriteLine? E perché stai scrivendo dei numeri? –

+2

@Fahad: l'equivalente reale è il valore costante -1. Questo è il valore di ritorno documentato quando non hai più da leggere. –

3

Fuori della parte superiore della mia testa,

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

Apparentemente Read() restituisce -1 se non c'è più niente da leggere. Non vedo una costante EOF definita. Potrei essere incline a utilizzare >= 0 invece di != -1 pari.

Non credo che ANSI vs Unicode faccia alcuna differenza: stai leggendo un numero da una chiamata API e lo inserisci nell'altro. Puoi usare Unicode anche in C.

+0

Sai cosa succederà se chiami 'Console.Out.Write (int)'? –

+0

@Lasse D'oh, buon punto. Risolto (si spera) – Rup