计算输入中的行数,单词数和字符数

时间:2010-02-14 07:26:40

标签: c

现在我正在阅读一本关于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);
}

它应该计算输入中的行数,单词数和字符数。但是,当我在终端中运行它似乎什么都不做。我错过了什么或者这段代码有问题吗?

6 个答案:

答案 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-dreturn(行上没有其他内容)以表示文件结尾。我的简单测试似乎可以正常工作。

答案 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

你会看到程序正常运行。