2015-05-04 4 views
0

Мне нужна помощь в исправлении этой программы на 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(); 

условия я испытал в то время цикла включают, indata, !indata.eof() и indata.good().

Любые мысли? Благодарю.

+0

Попробуйте удалить весь код, не связанный с проблемой. [Я серьезно] (http://stackoverflow.com/help/mcve). – Beta

+1

И как общее наблюдение. прекратите предполагать, что ваш IO * работает *. Этот код может провалиться во множестве мест, и все же вы идете так, как будто ничего не произошло. * Проверьте свои вызовы ввода-вывода *. – WhozCraig

+0

@beta Хотя я считаю, что весь код был релевантным, я отредактировал его, чтобы включить ту часть, где, как я думаю, проблема возникает. – jshapy8

ответ

0

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

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

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.

Смежные вопросы