Итак, по сути, я сделал довольно простой код, который помещает ряд чисел из списка input.txt в два выходных файла, один для четных чисел, а другой для нечетных чисел. Это действительно работает. Проблема в том, что я сделал это так, что после каждого числа, отсортированного в конкретный файл, он добавляет пустой пробел char, чтобы следующий номер, отсортированный в этот список, мог быть исключен из предыдущего. Опять же, это тоже работает. Тем не менее, мне не нужен пробел после последнего числа, отсортированного в каждом списке, поскольку следующего числа нет. Я попытался исправить это, используя строку if 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 )...
. И, как говорит Роберто Реал в своем ответе, решение состоит в том, чтобы вывести разделитель перед числом, а не после. Если вы сначала не создадите данные в памяти (например, используя дваstd::vector<int>
), вы не сможете знать, что достигли конца, пока не произойдет сбой ввода. (Также: почему все ваши переменные глобальные? Они должны быть локальными.) - person James Kanze   schedule 29.05.2014