繁体   English   中英

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

[英]count the number of lines, words, and characters within an input

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

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

程序仅在输入结束时终止(getchar返回EOF)。 当在终端上运行时,这通常不会发生,因此似乎程序被卡住了。 您需要在Linux上按Ctrl + D(可能两次)手动关闭输入,或者在Windows的行开头按F6和Enter(不同的系统可能使用不同的方法)。

它正在等待stdin的输入。 将文件重定向到它( myprog < test.txt )或输入数据并按Ctrl-D(* nix)或Ctrl-Z(Windows)。

当您运行它时,您需要输入文本,按return键,然后键入Ctrl-dreturn (行上没有其他内容)以表示文件结束。 我的简单测试似乎工作正常。

它正在做的是输入一个输入循环。 如果输入字符或换行符,屏幕上就不会发生任何事情。 您需要中断作为EOF的过程(在我的Mac上,这是CTRL + D)。 然后,您将得到结果。

getchar()返回标准输入的输入。 开始键入要包含单词计数和行数的文本。 到达EOF时您的输入终止,您可以通过按CTRL D来完成。

在这种情况下,CTRL D充当传输结束字符。

干杯

我通常会像这样处理这种输入(对于Linux):1。创建一个文件(例如,命名为“input.txt”),输入你的输入并保存2.使用管道将文本发送到你的应用程序(这里)假设您的应用程序名为“a.out”并在当前目录中:

cat input.txt | ./a.out

你会看到程序正常运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM