我正在编写一个程序,使用Map
从用户那里获取字符并计算它们。它应该在用户输入EOF时停止,打印出字符计数并完成打印。代码:
getchar
然而,在用户输入2个连续的EOF之前,循环不会停止。 我试图通过手动检查char是否为EOF并打破循环来强制循环停止,但它似乎不起作用。
如何在一次EOF后停止?
答案 0 :(得分:2)
声明getchar
函数返回int
,而不是char
。由于您将结果分配给char
,因此您无法捕获EOF。
将cur
的数据类型更改为int
。
编辑:
这很可能与您的终端如何处理EOF有关。当我测试它时,如果我在一行上输入一个或多个字符,然后按CTRL-D,字符(减去CTRL-D)将被发送到程序并由getchar
读取。如果我单独按一行上的CTRL-D,即使我按下ENTER输入前一行,也会检测到EOF。
如果您要将文件重定向到此程序的标准输入,您将看到在到达文件末尾时检测到EOF。