(c = getchar()) != EOF in C#?

9
以下是C#中与以下C代码等效的内容:
```csharp // C# code int i = 0; while (i < n) { Console.WriteLine("Hello World"); i++; } ```
while((c = getchar())!= EOF)
   putchar(c);

我知道 getchar() 和 putchar() 将被 Console.Read 和 Console.Write 替代,但 EOF 怎么办?特别是考虑到 C# 使用 Unicode 而 C 使用 ASCII,这会有什么影响吗?


你有查看 Console.Read 的文档吗?http://msdn.microsoft.com/zh-cn/library/system.console.read.aspx - Lasse V. Karlsen
3个回答

9

Console.Read()在EOF时返回-1(巧合的是,在大多数平台上,EOF被定义为-1)。

你可以这样做:

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

此外,C# 与 ASCII 相同地本地使用 UNICODE,即没有更多的暗示。 System.Char 表示一个 UCS-2 UNICODE 字符,它也适合于 int,因此一切都会很好。


3

从我个人的经验来看,

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

据我所知,如果没有更多可读取的内容,Read() 将返回 -1。我没有看到定义 EOF 常量的地方,因此建议使用 >= 0 而非 != -1

我认为 ANSI 和 Unicode 没有任何区别-您从一个 API 调用中读取一个数字并将其输入另一个 API 中。您也可以在 C 中使用 Unicode。


你知道如果调用 Console.Out.Write(int) 会发生什么吗? - Lasse V. Karlsen

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

那么在C#中没有C的EOF的真正等价物吗? - Fahad
2
为什么要调用WriteLine?你为什么要写数字? - Lasse V. Karlsen
2
@Fahad:真正的等价值是常量值-1。当你没有更多可读取的内容时,这是记录的返回值。 - Lasse V. Karlsen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接