【发布时间】:2014-05-29 08:59:05
【问题描述】:
所以,基本上,我编写了一个非常简单的代码,将 input.txt 列表中的一系列数字放入两个输出文件,一个用于偶数,另一个用于奇数。 它确实有效。问题是我已经做到了,因此在将每个数字排序到特定文件之后,它会添加一个空格字符,以便排序到该列表中的下一个数字可以与前一个数字区别开来。同样,这也确实有效。尽管如此,我不需要在每个列表中排序的最后一个数字之后使用空格字符,因为没有下一个数字。 我试图通过使用 如果 f.eof 行,尽管这只适用于最后一个数字被排序到的列表。另一个列表仍然有空格字符。任何想法如何解决它?
#include<fstream>
using namespace std;
fstream f;
fstream g;
fstream h;
int aux;
int main()
{
f.open("input.txt");
g.open("output1.txt");
h.open("output2.txt");
while(!f.eof())
{
f>>aux;
if(f.eof())
{
if(aux%2==0)
g<<aux;
else
h<<aux;
}
else
{
if(aux%2==0)
g<<aux<<" ";
else
h<<aux<<" ";
}
}
}
【问题讨论】:
-
不要使用
std::istream::eof()?它不会像你想的那样做。你的主循环应该只是while ( f >> aux )...。正如 Roberto Real 在他的回答中所说,解决方案是输出分隔符 before 数字,而不是之后。除非您首先在内存中创建数据(例如,使用两个std::vector<int>),否则您无法知道您已经到达终点,直到输入失败。 (另外:为什么你所有的变量都是全局的?它们应该是本地的。)