2015-01-18 3 views
-3

Меня попросили получить текст и цифры из .txt-файла в программу на C++. То, что я не знаю, число студентов, я буду сортировочных их оценки так, я использую время цикла с условием fin.eof() Код:Входы файлов в циклы

#include <iostream> 
#include <string> 
#include <fstream> 

using namespace std; 

int main() 
{ 
ifstream fin; 
fin.open("grades.txt"); 
cout << "Name\t\t\t" << "Midterm\t" << "HMAvg\t" << "Final\t" << "Average\t" << "Grade" << endl; 

while(!fin.eof()) 
{ 
    string name; 
    double mdtrm, final, hw, shw=0, ahw=0, avg; 
    char grade; 

    getline(fin, name); 

    fin >> mdtrm; 
    fin >> final; 

    for(int i=0; i<5; i++) 
    { 
     fin >> hw; 
     shw = shw+hw; 
    } 

    ahw = shw/5; 
    avg = ((mdtrm*0.3)+(final*0.4)+(ahw*0.3)); 

    if(avg>=90 && avg<=100) 
     grade = 'A'; 
    else if(avg>=80 && avg<90) 
     grade = 'B'; 
    else if(avg>=70 && avg<80) 
     grade = 'C'; 
    else 
     grade = 'F'; 

    cout << name << "\t" << mdtrm << "\t" << ahw << "\t" << final << "\t" << avg << "\t" << grade << endl; 
} 

fin.close(); 

system("pause"); 

return 0; 
} 

Она бесконечно петли. Я убедился, что .txt-файл в порядке Что случилось с моим кодом?

+1

Прочтите [это] (http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong) для начала. И [это] (http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice). –

+0

Я предсказываю, что одна из операций ввода завершилась неудачно и оставляет поток в состоянии отказа ('fin.fail() == true'). После этого все последующие операции немедленно прекращаются, и вы не добиваетесь никакого прогресса. –

+0

Что сказал вам отладчик? –

ответ

0

Проблема была с функцией getline, где она нестабильна для использования внутри циклов. Спасибо всем.

+0

Хм. Я не думаю, что когда-либо использовал getline вне цикла ... –

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