我使用Dev-C ++ 5.11在Windows XP PC中创建了一个C程序。它是我看到的典型字符计数程序,它如下:
#include <stdio.h>
main() {
long nc;
nc = 0;
while (getchar() != EOF) {
++nc;
}
printf("%ld", nc);
}
它编译没有问题,但它只能在我按下的字符中包含输入按钮(\n
)。如果我不打印0或根本不打印。我试过包括其他字符,如tab或backspace,但仍然没有。我正在使用ctrl + c来终止它。我做错了什么?
答案 0 :(得分:0)
你的程序应该可以正常工作。尝试通过将文件重定向到它来运行它:
myprogram < somefile
您观察到的问题来自终端处理文件结尾。通过在Windows中键入Ctrl-Z<enter>
和在Unix中键入Ctrl-D
来表示文件结尾。
但请注意,您应该以这种方式编写程序:
#include <stdio.h>
int main(void) {
long nc;
nc = 0;
while (getchar() != EOF) {
++nc;
}
printf("%ld\n", nc);
return 0;
}
答案 1 :(得分:0)
缓冲输入。
当您输入输入时,它会被终端缓冲(cmd.exe,xterm,等等)。此时您的程序仍未“看到”任何输入。只有在按Enter键后,终端才会将缓冲区内容发送到您的程序。
如果在按Enter键之前终止程序,则不会发送/处理任何内容。
答案 2 :(得分:0)
getchar()读到EOF;所以,你不会看到你的printf()输出,直到while循环退出(也就是说,当getchar()函数返回EOF时)。
要发送EOF,您可以按CTRL + D.尝试输入您的输入,然后点击CTRL + D,看看是否有效。至少在UNIX / OS X中,这将发送EOF。您还可以比较字符,如果按下某个键,则退出循环并查看计数。
如果您在另一个程序的输出中进行管道输送,那么这应该可以正常工作,因为它会在输出完成之后接收到EOF。例如,cat文件| ./counterprogram