当前位置:
硬件测评 > 为什么需要多个 EOF (CTRL+Z) 字符?
为什么需要多个 EOF (CTRL+Z) 字符?
|
作为一点背景知识,我对 C 编程语言相当陌生,因此一直在尝试完成 Kernighan & Ritchie 手册第二版中的一些练习。我确实意识到,通过更多地使用标准库,我可以更简洁地处理一些问题,但我试图尽可能让书中有用的命令保持最新。
如果有什么区别的话,我将使用 Tiny C 编译器 (TCC) 在 Windows XP 环境中编译源代码,并在 XP 控制台 (cmd.exe) 中执行二进制文件。
问题:处理
文件结束 (EOF) 字符
。我整理了一个小测试用例来说明这个问题。该程序似乎可以处理 EOF 字符(部分)。我将尝试用示例输入/输出来演示该问题。
#包括
int main()
{
int 字符,计数;
字符=0;
字符= getchar();
for (计数 = 0; 字符!= EOF; ++计数)
{
字符= getchar();
}
printf(\"计数:%d\", count);
返回0;
}
示例输入 1:1:2ѭ(其中 ^Z/CTRL+Z 代表 EOF 字符,[enter] 代表 Enter 键。)
示例输出 1:
计数:4
(等待更多输入或使用 ^C/^Z[enter] 正确结束)
输入示例 2:
abcd^Zefgh
示例输出 2:
计数:4
(等待更多输入或使用 ^C/^Z[enter] 正确结束)
正如两个示例中所指出的,在启动 ^C/^Z[enter] 序列之前,不会输出字符计数。程序将在启动之前等待(甚至处理)更多输入。但是,如示例 2 所示,当程序遇到初始 ^Z 时,如果启动 ^C/^Z[enter] 序列,它将停止处理该输入行,等待更多输入,或者返回正确的计数。我不明白为什么程序只部分处理 EOF 字符。在我看来,如果你想截断样本2的末尾,它也应该完全脱离循环。为什么程序在识别 EOF 字符后不打印当前计数并立即退出,有什么想法吗?