遇到负整数时,如何停止从文本文件中读取整数? 我尝试编写C++中的一个简单代码,从文本文件中读取整数,当遇到负数时,代码应该停止读取。txt文件每行包含1个正整数,最后一行为负整数

遇到负整数时,如何停止从文本文件中读取整数? 我尝试编写C++中的一个简单代码,从文本文件中读取整数,当遇到负数时,代码应该停止读取。txt文件每行包含1个正整数,最后一行为负整数,c++,C++,我的代码现在使用eof,它也读取负整数,这是我不想要的 while(!inFile.eof()) { inFile >> data; } 文本文件 10 22 33 34 -1 提前感谢:)您至少需要读取负数,以确定您已到达输入端 while( inFile >> data) { if ( data < 0 ) break; } while(填充>>数据) { 如果(数据>数据; 如果(数据>数据; 如果(数据>0) 可能完全是错的。(只

我的代码现在使用eof,它也读取负整数,这是我不想要的

while(!inFile.eof())
{
    inFile >> data;
}
文本文件

10
22
33
34
-1   

提前感谢:)

您至少需要读取负数,以确定您已到达输入端

while( inFile >> data)
{
    if ( data < 0 ) break;
}
while(填充>>数据)
{
如果(数据<0)中断;
}

也许像这样的东西,尝试测试传入的整数,会起作用:

while(!inFile.eof())
{
    inFile >> data;
    if ( data < 0 ) {
      break;
    }
}
while(!infle.eof())
{
填充>>数据;
如果(数据<0){
打破
}
}
hmm

int data = 0;
while(inFile >> data && data >= 0) 
{
 // do stuff with data.
}
while(!infle.eof())
{
填充>>数据;
如果(数据>0)

可能完全是错的。(只要你把
istream::eof()
看作循环条件,代码几乎肯定是错的。)但不是注释:-)。使用
istream::eof()
是原始代码中的一个错误,应该指出这一点。(否则,尼姆的答案是完美的。)因为答案是错误的:只有尝试读取超过EOF的数据时,EOF才会被命中。因此,EOF不会在
infle>>数据之前设置;
但会在该调用之后设置。设置EOF后,您仍然会使用数据,即使值现在基本上是随机的。请记住,最后一次成功读取将读取到EOF,但不会超过EOF。最后一次读取将尝试读取过去并失败(此时您无法使用读取到的值)@LightnessRacesinOrbit,我认为代码非常简洁地解释了需要做什么…好奇的读者应该能够了解其中的内容并调查他们不确定的部分-我认为这是一项宝贵的技能…是的,我同意,但当OP已经表示他在这一领域缺乏一些理解时,将代码的部分更改为如果不解释你为什么这样做往往比不这样做更有害。否则他可能会认为你摆脱了
,而(!eof)
仅仅是出于风格的原因,例如。
while(!infile.eof())
{
infile>>data;
if(data>0)
cout<<data;
}