c - 一次将一个字符的输入复制到输出的程序

标签 c string file copy

我看到了这个复制方法。在一个循环中,您一个一个地读取字符并打印它们。 当我尝试重现这个时,我遇到了几个问题:

  1. 我的循环永远不会结束——这意味着没有EOF
  2. 我的输出是一些奇怪的字符,它会 self 重复——无论我输入什么字符/字符序列;

我尝试过使用 intchar ,但我还是红色 this thread我知道它应该是 int 因为 char 没有 EOF 终止符。

另外我不明白为什么要使用 int 而应该是 char

int x;

while(x = getchar() != EOF){
    putchar(x);
}

return 0;

我希望将我的输入文本复制到输出,然后以代码 0 退出。 实际输出是: 。 (此处不可见)。

最佳答案

while(x = getchar() != EOF)

应该是

while((x = getchar()) != EOF)

你的代码等同于

while(x = (getchar() != EOF))

Also i do not understand why use int when it should be char.

因为 EOF 不能用 char 表示。所有可以用 char 表示的值也可以用 int 表示,但反之则不行。但除非 getchar() 返回 EOF,否则它将返回一个可以用 char 表示的值。所以这段代码完全没问题:

while((x = getchar()) != EOF) {
    char c = x; // Will always work if you have checked for EOF

重要!

请注意:

char x;
while((x = getchar()) != EOF)

会“工作”。它会在 EOF 结束循环。但是还会有另一个值会被错误地解释为 EOF。这可以用这个片段来证明:

char c = EOF;
if((char)255 == c)
       printf("Ooops!\n");

关于c - 一次将一个字符的输入复制到输出的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58557606/

相关文章:

Java:解析字符串并将其分解为 'terms'

python - 不使用 reversed() 或 [::-1] 反转字符串?

java - 如何在 MAC OS X 上运行 .jar java?

c - malloc CPU 周期

c - 为什么动态分配的数组不会随着新数据的到来而更新?

c - 无需绑定(bind)即可从特定端口发送 UDP

c++ - GlPolygonStipple 的掩码参数如何工作?

关于字符串连接的 Swift 2 到 3 迁移错误

node.js - 在 Node.js 中从第 N 行读取到第 M 行文本文件

c - 使用 fscanf 读取整数时遇到问题