gpt4 book ai didi

c++ - EOF 在 Windows 上并不总是 ^Z?

转载 作者:太空宇宙 更新时间:2023-11-04 13:30:04 26 4
gpt4 key购买 nike

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

关于c++ - EOF 在 Windows 上并不总是 ^Z?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31868500/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com