我刚刚开始阅读 K&R 书。它介绍了一个 getchar() putchar() 循环程序,用于将字符从输入复制到输出,直到到达 EOF。
main()
{
int c;
while ((c = getchar()) != EOF)
putchar(c);
}
我尝试将其改为无限循环,看看当我尝试打印 EOF 时会发生什么。以下是代码:
#include <stdio.h>
int main() {
int c;
while(1) {
c = getchar();
if (c == EOF) {
printf("%d", c); // Since you cannot really use putchar() for EOF as it is -1
// break;
} else {
putchar(c);
}
}
putchar('\n');
return 0;
}
示例输出:
./a.out
a
a
-1
-1
df
df
-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1
我本来希望它打印 -1 然后等待下一个输入,但我发现它只是一直打印 -1。
如果我在打印 EOF 一次后添加一行来中断循环,它会打印 -1 一次然后退出程序,这是可以理解的。
但我不明白为什么没有 break 语句它只是继续循环并打印 -1。
起初我以为它以某种方式使用输出 -1 作为下一个循环的输入(实际上是接下来的 2 个循环,因为 -1 是 2 个独立的字符“-”和“1”),但如果是这种情况,为什么当我放入任何其他字符(如“a”)时没有看到这种无限循环行为,根据我之前的逻辑,这应该连续打印“a”。
有人能帮忙解释一下发生了什么事吗?