需要C项目帮助[重复]

问题描述 投票:0回答:2

这个问题在这里已有答案:

我是编码的新手,我正在通过一本名为“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中键入代码后,我运行它,当我输入一个单词并按下输入时没有任何反应。这个词没有计算和打印。我是所有这一切的新手,但如果有人有想法随时分享它。非常感谢你 !

c
2个回答
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
投票

它为什么要停止?你的期望是错误的。 getchar()将继续获得角色,直到遇到EOF

How to pass that to getchar?

对于Windows,Ctrl + Z将完成这一操作。然后按Enter键。 对于Unix或Linux系统,它将是Ctrl + D.

Responsive output before entering EOF

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

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

Further Explanation of the added code

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

© www.soinside.com 2019 - 2024. All rights reserved.