2016-04-15 7 views
1

Я кодирую программу, которая читает из текстового файла из нескольких строк чисел, состоящего из 4 столбцов, предназначенных для представления 4 тестов, проведенных несколькими учениками в одном классе.Ошибка странного кодирования в C++

После прочтения строки, программа должна рассчитывать среднее значение для каждого ученика, а затем давать им оценку в виде письма. Я закодировал это, чтобы сделать это. Проблема заключается в том, что среднее значение рассчитывается без проблем, а уровень письма первого ученика не будет отображаться. Есть ли ошибка, которую я забыл?

Вот код:

#include <iostream> 
#include <fstream> 

using namespace std; 

int main() 
{ 
    ifstream calcGrades; 
    calcGrades.open ("grades.txt"); 

    int test1, test2, test3, test4; 
    int studentNum = 1; 


    while(calcGrades.good()) 
    { 
     calcGrades >> test1 >> test2 >> test3 >> test4; 
     int average = (test1 + test2 + test3 + test4)/4; 
     char letterGrade; 
     if(average<60) 
      letterGrade='F'; 
     if(average<=60 && average<70) 
      letterGrade='D'; 
     if(average>=70 && average<80) 
      letterGrade='C'; 
     if(average>=80 && average<90) 
      letterGrade='B'; 
     if(average>=90) 
      letterGrade='A'; 
     cout << "Student " << studentNum 
      << "'s average is " << average 
      << " they currently have a " << letterGrade 
      << "." << endl; 
     studentNum++; 
    } 

    return 0; 
} 

А вот содержание файла он читает из:

44 55 77 88 
79 88 100 99 
77 99 98 99 
100 88 89 100 
55 56 40 77 
100 100 99 95 
88 84 87 88 
96 97 99 100 
30 44 77 55 
79 77 88 0 
54 52 60 77 
88 77 88 77 
44 77 10 95 

Спасибо за любую помощь, оказанную, я был мучительный над этим и я просто не вижу, что пошло не так.

+1

Смотрите также http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong – user657267

+0

не знаю, кто проголосовали за закрытие этого из-за отсутствия информации, не содержащей кода. Четко обозначен наблюдаемый выход, код MCVE и входные данные. Скорее, он должен быть отмечен должным образом и невоспроизводимым после того, как указанная опечатка будет рассмотрена. – WhozCraig

+0

«Я закодировал это, чтобы сделать это». - Компьютеры делают ** точно ** то, что мы им говорим. Если наблюдаемый результат не соответствует ожиданиям, мы не сказали им, что, по нашему мнению, мы им сказали, и должны * проверить наши предположения *. ;-) – DevSolar

ответ

0

Правильная логика должна быть:

if(average<60) 
letterGrade='F'; 
else if(average>=60 && average<70) 
//    ^^ 
letterGrade='D'; 
else if(average>=70 && average<80) 
letterGrade='C'; 
else if(average>=80 && average<90) 
letterGrade='B'; 
else if(average>=90) 
letterGrade='A'; 
+0

Спасибо, это работает ... –

+0

@ VCP, любая идея, как репутация улучшится и как весь этот Stackoverflow работает, я новичок в этом. –

+0

@AtulAgarawal: [Что такое репутация] (http://stackoverflow.com/help/whats-reputation). Собственно, проверьте весь FAQ, он достаточно хорошо написан. – DevSolar