我是一名新程序员,正在阅读 K&R 的“ANSI C”第二版书。该示例具有以下程序,该程序使用 getchar() 对字符进行计数,直到到达 EOF。
include <stdio.h>
int main()
{
double nc;
for (nc = 0; getchar() !=EOF; ++nc)
;
printf("%.0f\n", nc);
}
编译并运行后(使用记事本和终端),我可以输入“123456789”,按回车键(什么也没有发生),然后输入Ctrl+Z,然后再次按回车键,程序终止,结果为10(合理的结果,但是我不确定它是否将第 10 个字符算作 Ctrl、“Z”、“Ctrl+Z”或 Enter 键...我怀疑它是 Enter 键)。如果我尝试输入“123456789CtrlZ”+“Enter”,则什么也不会发生。如果我唯一的输入是“Ctrl+Z”然后是“Enter”,则程序将以 0(预期)结果终止。
我也在 CLion 中运行这个程序,但我无法满足 EOF,我必须手动中止该程序,因此我从未获得字符计数(我尝试过 Ctrl+Z、Ctrl+D、Enter、ESC、所有组合, ETC。)
这个主题在此处有所涉及,这有帮助,但并不能完全满足我的问题。我知道我不需要知道 EOF 的实际值(打印为“-1”)。这更多的是关于该程序如何执行的实际问题。我假设 for 循环不会执行,直到我输入一串字符后按“Enter”键,但是:
- 为什么“123456789CtrlZ”+“Enter”不会导致 main() 完全执行并输出 9?
欣赏这方面的任何智慧。除非我完全理解每个示例,否则我会尽量不要继续阅读本书。
编辑数据以支持以下答案: