#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?
答案 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
宏的值,这与您在操作系统中执行的操作无关,以生成文件结束条件。