[英]EOF is not always ^Z on Windows?
#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
是一个扩展为负int(通常为-1
)的宏。
这是一些输入函数返回的数字,指示发生文件结尾。 文件结束条件是由操作系统触发的(与按^ Z或输入用完之类的东西无关 )。
编码:
int x;
cin >> x
执行格式化的输入 。 >>
和<<
操作符用于格式化的I / O。 这意味着读取数字的文本表示形式并将其转换为int
。 如您所知,获得x == -1
的唯一方法是实际输入-1
。
要检测是否发生文件结尾,可以在读取后通过cin.eof()
检查流。 (请注意,通常应检查所有故障模式 ,而不仅仅是文件结尾)。
这段代码:
if ((x=cin.get()) == EOF)
如果发生文件结尾,则将匹配,因为istream::get()
是少数几个通过返回的值指示文件结束条件的函数之一。 但是,您再次输出EOF
宏的值,该值与您在操作系统中生成文件结束条件所执行的操作无关。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.