c - C 字数统计程序

标签 c

我正在引用 K 和 R 书来学习 C; 它是关于字数统计程序中带有 EOF 的 while 循环,书中给出的程序运行良好,但我想知道它如何在一次输入后停止接受输入并给出行数、字数和字符数的输出。在这个程序之前,我常常在使用带有 !=EOF 的 while 循环的任何地方按 Ctrl + Z 后按 Enter 来获取输出。

请帮助我理解这个程序到底发生了什么来打破循环。

附加代码和输出 -

#include<stdio.h>

#define IN 1            /* inside a word */
#define OUT 0           /* outside a word */

/* count lines, words, and charaters in input */

main()
{
    int c, n1, nw, nc, state; /* n1 for line count, nw for word count, & nc for character count */

    state = OUT;
    n1 = nw = nc = 0;
    while ( ( c = getchar() ) != EOF ){

    ++nc;
    if ( c == '\n')
    ++n1;
    if ( c == ' ' || c == '\n' || c == '\t')
    state = OUT;
    else if ( state == OUT) {
        state = IN;
        ++nw;
    }
    printf ( "%d %d %d \n", n1, nw, nc);

    }
}

输出- enter image description here

最佳答案

循环尚未结束。您可以通过输入更多字符并按 Enter 来验证这一点。你会看到更多的输出。这是因为这个printf:

printf ( "%d %d %d \n", n1, nw, nc);

循环中。它将在循环的每次迭代中执行。

<小时/>

如果您希望在使用 CTRL+ZEnter 发送 EOF 后看到输出,将 printf 移到循环之外。

关于c - C 字数统计程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30645935/

相关文章:

c - 在函数内部用 C 语言打开一个文件并在外部使用它

c - C 编程中的 3D 数组

在 C 中将字节转换为 Int/uint

c - 现有的线程池 C 实现

python - PyImport_Import 与导入

c - 赋值时类型不兼容

c - 如何使 gdb "grok"函数编写成在线汇编?

c - 使用 read(...) write(...) 在 C 中读取和写入文件

c - 找不到静态库中定义的函数

C/cmake - 如何在 TARGET_LINK_LIBRARIES 中指定库时向(未使用的)库添加链接器标志?