现在我正在阅读一本关于C的书,并且在书中遇到了一个我无法工作的例子。
#include <stdio.h>
#define IN 1
#define OUT 0
main()
{
int c, nl, nw, nc, state;
state = OUT;
nl = nw = nc = 0;
while ((c = getchar()) != EOF) {
++nc;
if (c == '\n')
++nl;
if (c == ' ' || c == '\n' || c == '\t')
state = OUT;
else if (state == OUT) {
state = IN;
++nw;
}
}
printf("%d %d %d\n", nl, nw, nc);
}
它应该计算输入中的行数,单词数和字符数。但是,当我在终端中运行它似乎什么都不做。我错过了什么或者这段代码有问题吗?
答案 0 :(得分:7)
程序仅在输入结束时终止(getchar返回EOF)。当在终端上运行时,这通常不会发生,因此似乎程序被卡住了。你需要在Linux上按Ctrl + D(可能两次)手动关闭输入,或者在Windows的行开头按F6和Enter键(不同的系统可能会使用不同的方法)。
答案 1 :(得分:2)
它正在等待stdin的输入。将文件重定向到其中(myprog < test.txt
)或输入数据并按Ctrl-D(* nix)或Ctrl-Z(Windows)。
答案 2 :(得分:1)
运行时,您需要输入文字,按return
,然后输入Ctrl-d
和return
(行上没有其他内容)以表示文件结尾。我的简单测试似乎可以正常工作。
答案 3 :(得分:1)
它正在做的是输入一个输入循环。如果输入字符或换行符,屏幕上就不会发生任何事情。您需要中断作为EOF的过程(在我的Mac上,这是CTRL + D)。然后,您将得到结果。
答案 4 :(得分:1)
getchar()返回标准输入的输入。开始键入要包含单词计数和行数的文本。当达到EOF时,您的输入将终止,您可以通过按CTRL D来完成。
在这种情况下,CTRL D充当传输结束字符。
欢呼声
答案 5 :(得分:0)
我通常会像这样处理这种输入(对于Linux): 1.创建一个文件(例如,名为“input.txt”),输入你的输入并保存 2.使用管道将文本发送到您的应用程序(这里假设您的应用程序名为“a.out”并在当前目录中):
cat input.txt | ./a.out
你会看到程序正常运行。