当前位置:硬件测评 > 为什么需要多个 EOF (CTRL+Z) 字符?

为什么需要多个 EOF (CTRL+Z) 字符?

  • 发布:2023-09-30 12:25

| 作为一点背景知识,我对 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 字符后不打印当前计数并立即退出,有什么想法吗? ​​

相关文章