2013-03-27 2 views
0

Я пишу домашнее задание, которое просит пользователя прочитать в текстовом файле, который содержит неизвестное количество SSN и оценок. Затем программе необходимо вычислить максимальные, минимальные и средние баллы, затем вывести максимальную оценку с помощью соответствующего SSN, а также оценки min и avg.Не получать ожидаемый результат

Кажется, что он работает правильно, но на выходе все «0».

Любая помощь по фиксации это очень ценится.

Код:

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


using namespace std; 

int main() 
{ 
    string ssn, maxSSN; 
    int grade = 0, totalGrades = 0, count = 0, maxScore = 0, minScore = 0; 
    double avgScore = 0; 

    ifstream inFile; 
    inFile.open("C:\\lab5a.txt"); 

    if(!inFile) 
    { 
     cout << "Error opening the requested file\n\n"; 
     system("pause"); 
     return 101; 
    } 



    while (!inFile.eof()) 
    { 
     if (count == 0) 
     { 
      maxScore = grade; 
      minScore = grade; 
     } 
     else 
     { 
      if (grade > maxScore) 
       maxScore = grade; 
      if (grade < minScore) 
       minScore = grade; 
     } 
      grade += totalGrades; 
      count++; 

    } 

    if (count) 
     avgScore = totalGrades/count; 

    cout << "Maximum Score: " << maxScore << "  Student SSN:" << maxSSN << "\n"; 
    cout << "Minimum Score: " << minScore << "\n"; 
    cout << "Average Score: " << avgScore << "\n"; 
    // studentFile >> ssn >> grade; 

    inFile.close(); 

    cout << "\n\n"; 
    system("pause"); 
    return 0; 

} 
+0

'totalGrades' никогда не изменяется во время цикла« чтение файла ». – DCoder

+2

Вы никогда не читали файл. Это действительно ваш код, потому что мне кажется, что он никогда не завершится ...? – RichieHindle

+0

Нечеткое название вряд ли будет полезно для будущих посетителей сайта. Слишком локализован. –

ответ

3

1.You ничего не читает из inFile. Скорее всего, вы хотите, чтобы прочитать значение класса:

while (!inFile.eof()) 
{ 
    inFile >> grade; 
    ... 

Согласно обратной связи от @Blastfurnace, используя inFile.eof() тоже неправильно. Рассмотрим следующий входной файл:

3 
5 
9 
17 

, где каждая строка завершается lf. Затем цикл будет читать 5 строк, так как он не обнаруживает конца файла после значение 17 было прочитано, но попытается прочитать другое значение из файла. count будет 5, когда цикл завершается, что неверно.

Используйте следующее условие вместо:

while (inFile >> grade) 
{ 
    ... 

также прочитать номер социального страхования, используйте:

while (inFile >> ssn >> grade) 
{ 
    ... 

Это гарантирует, что оба ssn и grade были прочитаны из файла при выполнении цикла тело.

2. Расчет totalGrades имеет операнды в неправильном порядке:

grade += totalGrades; 

должен быть

totalGrades += grade; 

3.You объявили avgScore как двойной, но

avgScore = totalGrades/count; 

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

avgScore = totalGrades/(double) count; 

4.Что до сих пор отсутствует, является обработка в ПКР

Вы должны прочитать его вместе с оценкой из файла, и затем назначьте его maxSSN в том же месте, где вы присвоите значение maxScore.

+0

Просьба не указывать новичкам цикл на 'eof()'. [Это плохая практика] (http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong). – Blastfurnace

+0

Я этого не делал, его вопрос:) –

+1

Как насчет того, чтобы он говорил, что «в то время как (infile >> grade) {}' вместо этого? – Blastfurnace

0

Вы не читает файл и, следовательно, не принимая grade как вход.

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