gpt4 book ai didi

c++ - (C/C++) Windows 7 中的 EOF

转载 作者:可可西里 更新时间:2023-11-01 10:55:58 27 4
gpt4 key购买 nike

#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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com