Windows 上的 EOF 不总是 ^Z 吗?
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
是一个扩展为负整数的宏(通常是-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
宏的值,这与您在操作系统中为生成文件结束条件所做的操作无关。
#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()
检查流。 (请注意,通常 you should check for all failure modes,而不仅仅是文件结尾)。
此代码:
if ((x=cin.get()) == EOF)
如果发生文件结束, 将匹配,因为 istream::get()
是少数几个通过返回值指示文件结束条件的函数之一。但是,您再次输出 EOF
宏的值,这与您在操作系统中为生成文件结束条件所做的操作无关。