Мне нужна помощь в исправлении этой программы на 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()
,
Какие-нибудь мысли? Благодарю.
Я решил эту проблему:
Я не мог понять, как заставить цикл 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.