2013-11-14 2 views
0

Ниже приведен фрагмент кода, который я написал. Я не включил весь код из своих функций, потому что на данный момент у меня его нет на моем рабочем компьютере. Мне нужно перебирать около 10 строк данных, собирать информацию, а затем выполнять вычисление (calcdata) и выводить в выходной текстовый файл (senddata). Мои функции работают отлично, но они не читаются в первой строке моего текстового документа. Я могу читать первую строку, вычислять первую строку, а затем выводить первую строку.while (infile) loop только считывает первую строку из моего текстового файла

/*  
    My input file is: 

     10 0 S Y 100 
     5 7 S N 50 
     20 4 D Y 9 
     11 2 S Y 6 
     5 1 S N 120 
     31 5 S N 500 
     15 3 D N 40 
     18 4 S N 50 
     12 0 S N 40 
     26 7 D Y 200 

    */ 

    void getdata (int & adultget, int & childget, char & mealtypeget, char & weekendget, int & depositget, bool & error) 

    ifstream infile; 
    ofstream outfile; 

    int main() 
     { 
       infile.open("C:\\input.txt"); 
       outfile.open("C:\\output.txt"); 
       while (infile) 
         { 
          getdata(adult, child, mealtype, weekend, deposit, error); 
          calcdata(adult, child, mealtype, weekend, deposit, adultcost, childcost, totalfood, surcharge, tax, tip, totalparty, discount, totaldue); 
          senddata(adultcost, childcost, mealtype, weekend, deposit); 
         } 
     infile.close(); 
     outfile.close(); 
     return 0; 
     } 

    void getdata (int & adultget, int & childget, char & mealtypeget, char & weekendget, int & depositget, bool & error) 
     { 
       infile >> adultget >> childget >> mealtypeget >> weekendget >> depositget; 
       . 
       . 
       . 
     } 

Мой входной файл имеет около 10 строк данных, сочетание int и char. Мои функции считывают только первую строку файла. Любая помощь?

+0

Как насчет 'while (! infile.eof())'? –

+0

@faranwath: Нет, плохая практика. Он просто проверяет один из плохих флагов. – deepmax

+0

Код, который вы указали, не содержит причины проблемы. –

ответ

0

Вы должны проверить поток в нужном месте Изменение getdata который возвращает bool:.

bool getdata (...) 
{ 
    bool ok = infile >> adultget >> ...; 

    ... 

    return ok; 
} 

и цикл должен быть например:

while (getdata(adult, child, ...)) 
{ 

    calcdata(adult, child, ...); 
    senddata(adultcost, childcost, ...); 
} 
+0

Так измените мою функцию getdata от void до bool? – user2990884

+0

@ user2990884: Да, по-моему, это хороший способ вернуть статус чтения. – deepmax

0

Ваш метод getdata() изменяет локальные копии взрослого, дочернего и т. Д. Вам нужно передать аргументы к нему по ссылке, если вы ожидаете изменения значений в главном.

т.е. недействительная GetData (интермедиат & adultget, внутр & childget .. и так далее

+0

Извините, я забыл, что я действительно сделал это в своем исходном коде. Я перепечатал это с работы. Редактирование моего оригинального сообщения сейчас. – user2990884

0

Я могу только предположить, что проблема заключается в том, что какая-то ошибка произошла, когда вы читаете данные, например, там, может быть, неправильный формат данные . в файле

+0

Влад благодарит вас за ответ. Когда я нахожусь дома примерно через 1 час, я вставлю весь свой код. – user2990884

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