关于EOF的getchar的奇怪行为

时间:2017-04-18 19:15:00

标签: c

我正在编写一个程序,使用Map从用户那里获取字符并计算它们。它应该在用户输入EOF时停止,打印出字符计数并完成打印。代码:

getchar

然而,在用户输入2个连续的EOF之前,循环不会停止。 我试图通过手动检查char是否为EOF并打破循环来强制循环停止,但它似乎不起作用。

如何在一次EOF后停止?

1 个答案:

答案 0 :(得分:2)

声明getchar函数返回int,而不是char。由于您将结果分配给char,因此您无法捕获EOF。

cur的数据类型更改为int

编辑:

这很可能与您的终端如何处理EOF有关。当我测试它时,如果我在一行上输入一个或多个字符,然后按CTRL-D,字符(减去CTRL-D)将被发送到程序并由getchar读取。如果我单独按一行上的CTRL-D,即使我按下ENTER输入前一行,也会检测到EOF。

如果您要将文件重定向到此程序的标准输入,您将看到在到达文件末尾时检测到EOF。