while ((c = getchar()) != EOF) 即使代码与 book 几乎相同,也不会终止

while ((c = getchar()) != EOF) not terminating even though code near identical to book

提问人:TaxFrog 提问时间:7/15/2022 最后编辑:TaxFrog 更新时间:7/16/2022 访问量:184

问:

Kernighan 和 Ritchie 的 C 语言练习 1-8

void countBlanksTabsNewlines() {
    int c, newLines, tabs, blanks;
    newLines = 0;
    tabs = 0;
    blanks = 0;

    while ((c = getchar()) != EOF){
        if (c == '\n'){
            ++newLines;
        } else if(c == '\t'){
            ++tabs;
        } else if(c == ' '){
            ++blanks;
        }
    }
    printf("New Lines = %d , Tabs = %d , Blanks == %d", newLines, tabs, blanks);
}

当我使用任何输入然后按回车键时,while 循环不会终止。 我的代码基于仅计算书中新行的示例,所以不确定如何解决。 谢谢:)

编辑:我没有提到我正在使用 CLion IDE,在尝试了 CLion 中建议的快捷方式(未成功)后,我尝试在在线编译器中执行相同的操作,并且 ctrl+D 有效。

C while-loop clion eof

评论

3赞 Weather Vane 7/15/2022
在 Windows 中,Ctrl-Z 必须位于两个换行键之间。
1赞 Dai 7/15/2022
你指的是这本书的1988年第二版吗?在这种情况下,我不想告诉你,这本书现在已经过时了,不应该被用作学习 C 的资源。
3赞 Weather Vane 7/15/2022
“Enter”不是 EOF。
0赞 TaxFrog 7/15/2022
@Dai是的,我正在使用那个确切的版本(由 Kernighan 和 Ritchie 签名,赞美二手书哈哈),这是我明年大学推荐的文本,所以我会坚持下去。无论如何,什么文本是最新的,值得使用的?
0赞 Dai 7/15/2022
@TaxFrog“这是我下一年大学的推荐课文”——呃——哦......你可能想问问你的院长/教授为什么它在名单上(也就是说,我自己的大学也有这本书在阅读清单上,但只是作为历史参考)。无论如何,请查看此 QA - 并确保您获得的任何书籍都涵盖 C17,理想情况下也涵盖 C23 草案。

答:

-2赞 RickSanchez 7/15/2022 #1

要获取 EOF,您需要在控制台输入字符串末尾的 Windows platfrom 上按 Ctrl+z。

评论

0赞 0___________ 7/15/2022
从其他用户的评论中复制?
2赞 Weather Vane 7/15/2022
在 Windows 上,您需要在行输入的开头按 Ctrl-Z - 这是行上唯一的字符。