Программа не будет читать после первой записи в файле

Мне нужна помощь в исправлении этой программы на C ++, которая не записывает вторую запись одного файла в другой файл. Кажется, что только первая запись записывается только в файл, а затем после этого цикл while завершается, хотя конец файла не достигнут. Вот программа:

indata.open("income.dat", ios::out | ios::binary);

while (true)
{
indata.ignore();
indata.getline(person[count2].name, NAMESIZE);
indata >> person[count2].income;
indata >> person[count2].rent;
indata >> person[count2].food;
indata >> person[count2].utilities;
indata >> person[count2].miscell;

if (count2 == 0)
{
outdata << setw(20) << "Name"<< setw(10) << "Income"<< setw(10) << "Rent"<< setw(10) << "Food"<< setw(15) << "Utilities"<< setw(15) << "Miscellaneous"<< setw(10) << "Net Money" << endl << endl;
}

outdata << setw(20) << person[count2].name
<< setw(10) << person[count2].income
<< setw(10) << person[count2].rent
<< setw(10) << person[count2].food
<< setw(15) << person[count2].utilities
<< setw(15) << person[count2].miscell
<< setw(10) << person[count2].net << endl;

count2++;
}

outdata.close();

Условия, которые я тестировал в цикле while, включают: indata, !indata.eof(), а также indata.good(),

Какие-нибудь мысли? Благодарю.

0

Решение

Я решил эту проблему:

Я не мог понять, как заставить цикл while повторяться более одного раза для этого конкретного случая, поэтому я использовал цикл for:

indata.open("income.dat", ios::out | ios::binary);

for (count2 = 0 ; count2 < count + 1 ; count2++)
{
indata.ignore();
indata.getline(person[count2].name, '\n');
indata >> person[count2].income;
indata >> person[count2].rent;
indata >> person[count2].food;
indata >> person[count2].utilities;
indata >> person[count2].miscell;
indata >> person[count2].net;

if (count2 == 0)
{
// write information to output file
outdata << setw(20) << "Name" << setw(10) << "Income" << setw(10) << "Rent"<< setw(10) << "Food" << setw(15) << "Utilities" << setw(15)
<< "Miscellaneous" << setw(10) << "Net Money" << endl << endl;
}

outdata << setw(20) << person[count2].name
<< setw(10) << person[count2].income
<< setw(10) << person[count2].rent
<< setw(10) << person[count2].food
<< setw(15) << person[count2].utilities
<< setw(15) << person[count2].miscell
<< setw(10) << person[count2].net << endl;
}

outdata.close();

Для этого конкретного случая используйте count из предыдущего экземпляра в качестве условия для цикла for.

0

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector