当遇到负整数时,如何停止从文本文件中读取整数?

3

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

我现在的代码使用eof来读取,但它也读取了负整数,而我不想要这个。

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

文本文件

10
22
33
34
-1   

提前感谢你的帮助 :)

4个回答

9

hmm..

int data = 0;
while(inFile >> data && data >= 0) 
{
 // do stuff with data.
}

@LightnessRacesinOrbit,我认为这段代码已经很简洁地解释了需要做的事情...一个好奇的读者应该能够理解其中的内容并探究他们不确定的部分——在我看来这是一项非常有价值的技能... - Nim
1
是的,我同意,但当原帖作者已经表明他在这个领域缺乏一些理解时,仅仅改变代码而不解释为什么这样做往往更有害。否则,他可能会认为你只是出于风格原因摆脱了 while (!eof) 这段代码。 - Lightness Races in Orbit

4

您至少需要读取负数才能确定已经到达输入的末尾。

while( inFile >> data)
{
    if ( data < 0 ) break;
}

13
完全错误。每当您看到 istream::eof() 作为循环条件时,几乎可以确定代码是错误的。 - James Kanze
在原始代码中使用istream::eof()是一个错误,应该指出这一点。(否则,Nim的回答是完美的。) - James Kanze

1
while(!infile.eof())
{
infile>>data;
if(data>0)
cout<<data;
}

从文件中读取,检查是否大于零,然后打印它。

-5
也许像这样尝试测试传入的整数的代码会起作用:
while(!inFile.eof())
{
    inFile >> data;
    if ( data < 0 ) {
      break;
    }
}

5
因为答案是错误的:只有在试图读取超过EOF时,才会遇到EOF。因此,EOF并没有在 inFile >> data; 之前设置,但在此调用后将被设置。当它被设置时,您仍然使用data,即使该值现在基本上是随机的。请记住,最后一次成功读取将读取但不包括EOF。最后一次读取将尝试读取超过EOF并失败(此时您无法使用要读入的值)。 - Martin York

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接