C 计算输入中的行数、字数和字符数

C 计算输入中的行数、字数和字符数,c,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语言的书,在书中我遇到了一个我无法开始工作的例子

#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);
}
#包括
#在1中定义
#定义出0
main()
{
北卡罗来纳州、北卡罗来纳州、北卡罗来纳州、北卡罗来纳州;
状态=输出;
nl=nw=nc=0;
而((c=getchar())!=EOF){
++数控;
如果(c=='\n')
++nl;
如果(c=''| | c='\n'| | c='\t')
状态=输出;
else if(state==OUT){
状态=IN;
++西北;
}
}
printf(“%d%d%d\n”,nl,nw,nc);
}

它应该计算输入中的行数、单词数和字符数。但是,当我在终端中运行它时,它似乎什么也不做。我是否丢失了某些内容或此代码有问题?

运行此代码时,您需要键入文本,按
返回
,然后键入
Ctrl-d
返回
(行中没有其他内容)以表示文件结束。我的简单测试似乎可以正常工作。

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

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

它正在等待在stdin上输入。将文件重定向到其中(
myprog
),或者键入数据并按Ctrl-D(*nix)或Ctrl-Z(Windows)。

getchar()从标准输入返回输入。开始键入要计算字数和行数的文本。当达到EOF时,您的输入将终止,您可以通过按CTRL D来完成此操作

在本例中,CTRL D用作传输结束字符


干杯

我通常这样处理此类输入(对于Linux): 1.制作一个文件(例如,名为“input.txt”),键入您的输入并保存 2.使用管道将文本发送到您的应用程序(此处假设您的应用程序名为“a.out”,位于当前目录中):


您将看到程序正确运行。

啊,我没有意识到我需要用文件结尾手动停止循环。感谢您的快速回复。您应该再等一会儿,然后再将问题标记为最佳问题。只是想一想……这里有一个很好的练习:使用switch语句而不是
if
s重写代码。结果将是更清晰的代码。使用更长、更具描述性的名称(例如,WORD中的
、“charCount”、“wordCount
)也会产生更清晰的代码。通过将真实文件重定向到stdin而不是控制台I/O来运行代码。例如;从命令行输入:myprogcat input.txt | ./a.out