EOF is not always ^Z on Windows?

时间:2015-08-07 01:50:25

标签: c++ eof cin

#include <iostream>
using namespace std;

int main()
{
    int x;
    cin >> x;
    if (x == EOF)
        cout << x;
    system("pause");
}

Inputting the EOF on Windows output nothing. While -1 outputs -1.

Over here

#include <iostream>
using namespace std;

int main()
{
    int x;
    if ((x=cin.get()) == EOF)
        cout << x;
    system("pause");
}

Inputting the EOF on Windows outputs -1. While -1 outputs nothing.

Now I am totally confused (I am working on 64-bit Windows 7 with Visual Studio 2015; though I do not think this is related)

I also want to add if "x" is assigned EOF in both cases, from where the difference came? I am comparing the value of "x" to EOF in both cases, right?

1 个答案:

答案 0 :(得分:0)

EOF是一个扩展为负int的宏(通常为-1)。

这是某些输入函数返回的数字,表示发生了文件结束。 操作系统触发文件结束条件的方式无关(无论是按^ Z,还是用完输入,或其他什么)。

代码:

int x;
cin >> x

执行格式化输入>><<运算符用于格式化I / O.这意味着要读取数字的文本表示并将其转换为int。如果您实际输入x == -1,则获得-1的唯一方法就是找到。

要检测是否发生了文件结束,您可以在执行读取后通过cin.eof()检查流。 (请注意,通常you should check for all failure modes,而不仅仅是文件结尾。)

此代码:

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

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