EOF在Windows上并不总是^Z

EOF is not always ^Z on Windows?

本文关键字:Windows EOF      更新时间:2023-10-16
#include <iostream>
using namespace std;
int main()
{
    int x;
    cin >> x;
    if (x == EOF)
        cout << x;
    system("pause");
}

在Windows上输入EOF,没有输出。而-1输出-1

这里的

#include <iostream>
using namespace std;
int main()
{
    int x;
    if ((x=cin.get()) == EOF)
        cout << x;
    system("pause");
}

在Windows上输入EOF输出-1。而-1不输出。

现在我完全糊涂了(我正在使用Visual Studio 2015开发64位Windows 7;虽然我不认为这是相关的)

我还想添加如果"x"在两种情况下被分配EOF,从哪里来的差异?在这两种情况下,我都在比较x的值和EOF,对吧?

EOF是一个展开为负整型的宏(通常是-1)。

这是一个由一些输入函数返回的数字,表示出现了文件结束。与操作系统触发文件结束条件的方式无关(无论是按^Z,还是输入不足,或其他)。

代码:

int x;
cin >> x

执行格式化输入>><<操作符用于格式化I/O。它意味着读取数字的文本表示并将其转换为int。您将获得x == -1的唯一方法是,如果您实际键入-1,如您所发现的。

要检测是否发生文件结束,可以在读取后通过cin.eof()检查流。(注意,通常您应该检查所有故障模式,而不仅仅是文件结束)。

这个代码:

if ((x=cin.get()) == EOF)
如果文件结束,

将匹配,因为istream::get()是少数几个通过返回值指示文件结束条件的函数之一。但是,您输出的是EOF宏的值,这与您在操作系统中生成文件结束条件的操作无关。