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

标签 c++ c windows

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

相关文章:

c++ - [C++]我的 COM 服务器需要同步吗?

c++ - Qt5 和 Cmake 链接 QApplication 头错误

c - 找到给定区间 [a,b) - C 中的所有 Carmichael 数

windows - 路径前缀\??\和\\?\

windows - 在 Windows7 中从 c# 代码执行时 Hadoop 命令不工作,错误显示 : "Access is denied"

c++ - 如何从 C++ 的标准输入中读取 n 个整数?

c++ - Visual Studio 中的 M_PI 问题

c - 如何在KEIL IDE中查找C项目的代码覆盖率?

c - 使用带有逻辑运算符的标志而不是条件语句(例如 if())

java - 在java上执行.exe,需要一些库