需要C项目帮助

时间:2017-12-24 16:17:43

标签: c

我是编码的新手,我正在通过一本名为“The C Programming Language - 2nd Edition - Ritchie Kernighan”的书学习,并且有以下代码:

#include<stdio.h>
#include<stdlib.h>
int main(){
    int c,nl;
    nl =0;
    while((c=getchar())!=EOF)
        if(c == '\n')
            ++nl;
    printf("%d\n",nl);
    return 0;
}

在CodeBlocks中键入代码后,我运行它,当我输入一个单词并按下输入时没有任何反应。这个词没有计算和打印。我是所有这一切的新手,但如果有人有想法随时分享它。非常感谢你!

2 个答案:

答案 0 :(得分:3)

问题是你从未阅读EOF(文件结束);这是来自控制台(您键入的地方)的输入数据的结尾。

您键入的所有内容都是字母,数字,特殊字符或换行符,但绝不会EOF

要生成EOF,您需要输入特殊的控制键组合。在Windows上,这是Ctrl+Z,在UNIX / Linux / macOS上,这是Ctrl+D

你正在读的这本书很棒,由C的两个创作者写的。它是我的第一本编程书之一,我仍然拥有它;一切都很疲惫。

小建议:始终将代码块放在{ }内以避免错误并创建更清晰的视觉效果,一致地使用空格,并添加空行。你的代码看起来像这样:

#include<stdio.h>
#include<stdlib.h>

int main()
{
    int c, nl;
    nl = 0;

    while ((c = getchar()) != EOF)
    {
        if (c == '\n')
        {
            ++nl;
        }
    }

    printf("%d\n", nl);

    return 0;
}

答案 1 :(得分:1)

为什么要停止?你的期望是错误的。 getchar()将继续获取字符,直至遇到EOF

如何将其传递给getchar

对于Windows Ctrl + Z 将起作用。然后按 Enter
对于Unix或Linux系统,它将是 Ctrl + D

输入EOF

前的响应输出

要获得更具响应性的输出,您可以添加此行,这将告诉您\n找到的累计总和。

    if(c == '\n'){
        ++nl;
        printf("Till now %d newline found",nl);
        fflush(stdout);
    }

进一步说明添加的代码

按Enter键时,上面提供的代码段会为您提供一些输出。但事情是,直到你输入EOF,它将继续等待越来越多的输入。这也是第一种情况发生的情况。所以你必须按 Ctrl + Z 然后按 Enter 。这将打破循环。您将看到最终输出 - 行数。