2011-04-07 69 views
2

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

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

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

文本文件

10 
22 
33 
34 
-1 

感谢提前:)

回答

8

嗯..从如果文件检查读取

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

您应该_explain_您的答案,而不仅仅是转储代码。 – 2013-10-14 12:07:15

+0

@LightnessRacesinOrbit,我认为代码非常简洁地解释了需要完成的工作......一位好奇的读者应该能够把握那些并且调查他们不确定的部分 - 一项宝贵的技能IMO ... – Nim 2013-10-14 14:00:07

+0

是的,我同意,但是当OP已经表明他在这个领域缺少了一些理解时,为了实现这个目标而改变了一些代码而没有做出解释,那通常是更危险的。否则,他可能会认为,例如,出于风格原因,你摆脱了“while(!eof)”。 – 2013-10-15 11:18:27

1

您将至少需要读取负数,以确定你已经达到了输入的结束。

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

只是错误的。 (只要你看到'istream :: eof()'为循环条件,代码几乎肯定是错的。) – 2011-04-07 11:04:08

+0

嗯,明白你的观点。我更正了代码。 – 2011-04-07 11:17:03

+0

但不是评论:-)。使用'istream :: eof()'是原始代码中的错误,应该指出这一点。 (否则,尼姆的答案是完美的。) – 2011-04-07 13:43:04

-5

也许这样的事情,它试图测试引入整数,将工作:

while(!inFile.eof()) 
{ 
    inFile >> data; 
    if (data < 0) { 
     break; 
    } 
} 
+1

为什么downvote,请吗?谢谢! – 2011-04-16 13:07:14

+3

因为答案是错误的:只有在尝试阅读EOF后才能打开EOF。所以EOF不会在'inFile >>数据之前被设置;'但是会在这次调用之后被设置。当它被设置时,即使价值现在基本上是随机的,你仍然使用数据。 Rember最后一次成功阅读将读取最新**,但不会过去** EOF。最后一次读取会尝试读取过去和失败(此时您不能使用读取的值)。 – 2012-01-04 01:08:41

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

大于零,然后打印它