2010-11-18 18 views
8

¿Cuál es el equivalente C# del siguiente código C:(c = getchar())! = EOF en C#?

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

Sé getchar() y putchar() van a ser reemplazados por Console.Read y Console.Write respectivamente, pero ¿y el EOF. Especialmente teniendo en cuenta que C# funciona con Unicode y C con ASCII, ¿cuáles son las implicaciones de eso?

+0

¿Revisó la documentación de Console.Read? http://msdn.microsoft.com/en-us/library/system.console.read.aspx –

Respuesta

8

Console.Read() devuelve -1 en EOF (coincidentemente, EOF se define como -1 en la mayoría de las plataformas).

que puede hacer:

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

También, C# funciona de forma nativa con UNICODE de la misma manera que C funciona de forma nativa con ASCII, es decir, no hay más implicaciones. System.Char representa un UCS-2UNICODE personaje, que también cabe en un int, por lo que todo estará bien.

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

¿Entonces no hay un equivalente real de EOF de C en C#? – Fahad

+2

¿Qué pasa con la llamada a WriteLine? ¿Y por qué escribes números? –

+2

@Fahad: el equivalente real es el valor constante -1. Este es el valor de retorno documentado cuando no tiene más para leer. –

3

De la parte superior de mi cabeza,

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

Al parecer Read() devuelve -1 si no hay nada más para leer. No veo una EOF constante definida. Me inclino a usar >= 0 en lugar de != -1 incluso.

No creo que ANSI vs Unicode marque la diferencia: está leyendo un número de una llamada API y alimentándolo en la otra. También puedes usar Unicode en C.

+0

¿Sabes qué sucederá si llamas a 'Console.Out.Write (int)'? –

+0

@Lasse D'oh, buen punto. Reparado (con suerte) – Rup