C 的 EOF 问题

void charCopyandCount()
{
    int c;          
    while((c = getchar()) != EOF)          
    {
        putchar(c);
    }
}

输入 abcd^Z 并没有结束,在输入 ^Z 就结束了,并显示 abcd;
为什么第一个 ^Z 没有当成 EOF (并且把换行吃掉了?)而第二个 ^Z 当成 EOF 处理了呢?

阅读 2.2k
1 个回答

^Z并不是 EOF (在LINUX下是^D),它只是一个终端的控制字符,和回车的作用很像,不过行为有些不同。
回车将当前终端的内容以及回车送入到文件描述符
^Z将当前终端的内容送入到文件描述符,不包括^Z
EOF这个东西其实不存在,它指的是 读文件时读不到下一个字符这种 状态,即读不到东西就返回EOF
所以当你什么都没输入的时候,输入^Z就回直接退出循环

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进