2010-11-18 71 views
8

什麼是C#相當於下面的C代碼:(c = getchar())!= EOF在C#中?

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

我知道的getchar()和的putchar()將要由Console.Read和Console.Write分別但是更換有關EOF。特別要牢記的是,C#與Unicode一起使用,C與ASCII一起使用,那麼它的含義是什麼?

+0

你檢查了Console.Read的文檔嗎? http://msdn.microsoft.com/en-us/library/system.console.read.aspx – 2010-11-18 12:39:20

回答

8

Console.Read()在EOF上返回-1(巧合的是,在大多數平臺上,EOF被定義爲-1)。

你可以這樣做:

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

此外,C#與UNICODE原生支持以同樣的方式,C工作本身與ASCII,即沒有更多的意義。 System.Char代表UCS-2UNICODE字符,它也適合於int,所以一切都會好的。

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

所以在C#中沒有真正的C的EOF等價物? – Fahad 2010-11-18 12:44:37

+2

與WriteLine的調用有什麼關係?你爲什麼要寫數字? – 2010-11-18 12:45:41

+2

@Fahad:真正的等值是恆定值-1。當你沒有更多的閱讀時,這是記錄的返回值。 – 2010-11-18 12:46:17

3

關閉我的頭頂,

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

顯然Read()返回-1,如果沒有什麼更多的閱讀。我沒有看到定義的EOF常量。我甚至可能傾向於使用>= 0而不是!= -1

我不認爲ANSI與Uni​​code有什麼區別 - 你是從一個API調用中讀取一個數字,並將它提供給另一個。你也可以在C中使用Unicode。

+0

你知道如果你調用'Console.Out.Write(int)'會發生什麼嗎? – 2010-11-18 12:44:59

+0

@Lasse D'oh,好點。修正(希望) – Rup 2010-11-18 12:45:50