#include <cstdio>
void fcopy(FILE* from, FILE* to);
int main()
{
fcopy(stdin, stdout);
return 0;
}
void fcopy(FILE* from, FILE* to)
{
int c;
while ((c = getc(from)) != EOF) {
putc(c, to);
}
}
当我运行这个程序时,^Z (Ctrl+z) 会发生一些意外行为,我会用它来指示 EOF。
我输入的“hello\n”在“fcopy”中执行 while 循环以打印相同内容。
"^Z\n"结束程序。
但是如果我输入“blahblah^Zasdfasdf\n”,虽然我希望程序打印“blahblah”并终止,但它会打印“blahblah→”和一个小箭头并等待我的输入。无论我在这里写下什么,都会被原封不动地抄下来;它似乎在删除“^Z”之后写入的任何内容的同时重新执行循环。
in: hello
out: hello
in: hello^Z
out/in: hello→?? // "??" is my input
out: ??
in: ^Z
termination
谁能解释一下为什么程序会那样工作? 提前感谢您的帮助。
最佳答案
这是因为 Windows 终端程序正在读取您的键盘输入并将其传递给您的程序,它正在像那样处理 Ctrl+Z。当在一行的开头按下时,它仅表示“信号输入结束”。
请注意,C 中的 EOF
并不代表实际(“物理”)字符,它是带外信号,表示“没有要读取的字符,因为文件已经结束了。
关于c++ - (C/C++) Windows 7 中的 EOF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25679743/