void charCopyandCount()
{
int c;
while((c = getchar()) != EOF)
{
putchar(c);
}
}
输入 abcd^Z 并没有结束,在输入 ^Z 就结束了,并显示 abcd;
为什么第一个 ^Z 没有当成 EOF (并且把换行吃掉了?)而第二个 ^Z 当成 EOF 处理了呢?
void charCopyandCount()
{
int c;
while((c = getchar()) != EOF)
{
putchar(c);
}
}
输入 abcd^Z 并没有结束,在输入 ^Z 就结束了,并显示 abcd;
为什么第一个 ^Z 没有当成 EOF (并且把换行吃掉了?)而第二个 ^Z 当成 EOF 处理了呢?
^Z
并不是EOF
(在LINUX
下是^D
),它只是一个终端的控制字符,和回车的作用很像,不过行为有些不同。回车将当前终端的内容以及回车送入到文件描述符
^Z
将当前终端的内容送入到文件描述符,不包括^Z
而
EOF
这个东西其实不存在,它指的是 读文件时读不到下一个字符这种 状态,即读不到东西就返回EOF
所以当你什么都没输入的时候,输入
^Z
就回直接退出循环