我试图用C++编写一个简单的代码来读取文本文件中的整数,代码应该在遇到负整数时停止读取。 txt文件在每行上包含1个正整数,最后一行是负整数。如何在遇到负数时停止从文本文件读取整数?
我的代码现在使用eof,它也读取负整数也是我不想要的。
while(!inFile.eof())
{
inFile >> data;
}
文本文件
10
22
33
34
-1
感谢提前:)
我试图用C++编写一个简单的代码来读取文本文件中的整数,代码应该在遇到负整数时停止读取。 txt文件在每行上包含1个正整数,最后一行是负整数。如何在遇到负数时停止从文本文件读取整数?
我的代码现在使用eof,它也读取负整数也是我不想要的。
while(!inFile.eof())
{
inFile >> data;
}
文本文件
10
22
33
34
-1
感谢提前:)
嗯..从如果文件检查读取
int data = 0;
while(inFile >> data && data >= 0)
{
// do stuff with data.
}
您将至少需要读取负数,以确定你已经达到了输入的结束。
while(inFile >> data)
{
if (data < 0) break;
}
只是错误的。 (只要你看到'istream :: eof()'为循环条件,代码几乎肯定是错的。) – 2011-04-07 11:04:08
嗯,明白你的观点。我更正了代码。 – 2011-04-07 11:17:03
但不是评论:-)。使用'istream :: eof()'是原始代码中的错误,应该指出这一点。 (否则,尼姆的答案是完美的。) – 2011-04-07 13:43:04
也许这样的事情,它试图测试引入整数,将工作:
while(!inFile.eof())
{
inFile >> data;
if (data < 0) {
break;
}
}
为什么downvote,请吗?谢谢! – 2011-04-16 13:07:14
因为答案是错误的:只有在尝试阅读EOF后才能打开EOF。所以EOF不会在'inFile >>数据之前被设置;'但是会在这次调用之后被设置。当它被设置时,即使价值现在基本上是随机的,你仍然使用数据。 Rember最后一次成功阅读将读取最新**,但不会过去** EOF。最后一次读取会尝试读取过去和失败(此时您不能使用读取的值)。 – 2012-01-04 01:08:41
while(!infile.eof())
{
infile>>data;
if(data>0)
cout<<data;
}
大于零,然后打印它
您应该_explain_您的答案,而不仅仅是转储代码。 – 2013-10-14 12:07:15
@LightnessRacesinOrbit,我认为代码非常简洁地解释了需要完成的工作......一位好奇的读者应该能够把握那些并且调查他们不确定的部分 - 一项宝贵的技能IMO ... – Nim 2013-10-14 14:00:07
是的,我同意,但是当OP已经表明他在这个领域缺少了一些理解时,为了实现这个目标而改变了一些代码而没有做出解释,那通常是更危险的。否则,他可能会认为,例如,出于风格原因,你摆脱了“while(!eof)”。 – 2013-10-15 11:18:27