C++ Fstream排序-不需要一个空格字符

C++ Fstream排序-不需要一个空格字符,c++,fstream,C++,Fstream,所以,基本上,我编写了一个非常简单的代码,将input.txt列表中的一系列数字放入两个输出文件中,一个用于偶数,另一个用于非偶数。 它确实有效。问题是,我已经这样做了,在将每个数字排序到特定文件后,它添加了一个空字符,以便排序到该列表中的下一个数字可以与上一个数字进行非语言化。同样,这也行得通。尽管如此,我不需要在每个列表中排序的最后一个数字后面加空格字符,因为没有下一个数字。 我试图通过使用 如果f.eof 行,但这仅适用于最后一个数字排序到的列表。另一个列表仍将具有空格字符。有没有办法解决

所以,基本上,我编写了一个非常简单的代码,将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;
fsf;
fsg;
fsh;
int aux;
int main()
{
f、 打开(“input.txt”);
g、 打开(“output1.txt”);
h、 打开(“output2.txt”);
而(!f.eof())
{
f> >辅助;
if(f.eof())
{
如果(辅助%2==0)

只需在每个新条目之前插入空格,当然不包括第一个条目

此外,如注释中所述,在
while
中首选条件
f>>aux

#include<fstream>
using namespace std;

fstream f;
fstream g;
fstream h;

int aux;

string g_sep, h_sep;

int main()
{
  f.open("input.txt");
  g.open("output1.txt");
  h.open("output2.txt");

  while(f>>aux)
    {
      if(aux%2==0)
        {
          g<<g_sep;
          g<<aux;
          g_sep = " ";
        }
      else
        {
          h<<h_sep;
          h<<aux;
          h_sep = " ";
        }
    }
}
#包括
使用名称空间std;
fsf;
fsg;
fsh;
int aux;
字符串g_sep,h_sep;
int main()
{
f、 打开(“input.txt”);
g、 打开(“output1.txt”);
h、 打开(“output2.txt”);
而(f>>辅助)
{
如果(辅助%2==0)
{

当然,循环条件是错误的,可能会导致最后一个条目被处理两次。并且代码包含未定义的行为,因为它使用
>
的结果,但没有检查它是否成功。通常的
while(f>>aux)有什么问题…
?重新编辑:不仅仅是首选项:在
f>>aux
之后不检查是否成功是一个错误。如果是首选项的问题…变量应该是本地变量,他应该检查打开是否成功,他应该在关闭输出文件后检查是否有错误(以及输入失败后),并且
main
的返回值应取决于是否存在错误。不要使用
std::istream::eof()
?它不会按照您的想法执行。您的主循环应该是
while(f>>aux)…
。正如Roberto Real在他的回答中所说,解决方案是在数字之前输出分隔符,而不是在数字之后。除非首先在内存中创建数据(例如,使用两个
std::vector
),否则在输入失败之前,您无法知道已到达终点。(另外:为什么所有变量都是全局的?它们应该是局部的。)