Цинковая петля никогда не заканчивается
У меня возникли проблемы с завершением цикла Cin в моей программе. Моя программа использует перенаправление Linux для чтения входных данных из файла hw07data, файл данных выглядит следующим образом:
100 20 50 100 40 -1
A34F 90 15 50 99 32 -1
N12O 80 15 34 90 22 -1
Первая часть - это общее количество баллов за класс, следующие строки - идентификационный номер ученика, за которым следуют их оценки, все заканчиваются -1.
Моя проблема: мой цикл while никогда не завершается, когда я запускаю команду./a.out < hw07dataМожет кто-нибудь просмотреть мой код и дать мне несколько советов? Я не хочу ответа, так как это домашняя работа, мне просто нужно руководство. Спасибо!!
#include
#include
using namespace std;
const int SENTINEL = -1; //signal to end part of file
const int LTAB = 8; //left tab
const int RTAB = 13; //right tab
int main()
{
cout < "Grant Mercer Assignment 7 Section 1002\n\n";
cout < setprecision(2) < fixed < showpoint;
cout < left < setw(LTAB) < "ID CODE" < right < setw(RTAB) < "POINTS" < setw(RTAB) < "PCT" < setw(RTAB) < "GRADE" < endl;
double Percentage, //holds students percentage
AvgPercentage;
int Earnedpoints, //earned points for specific student
Totalpoints, //total points possible for all students
AvgPoints, //average points for all students
NumClass; //counts the number of students
Totalpoints = Earnedpoints = //set all vals equal to zero
AvgPoints = AvgPercentage = Percentage = NumClass = 0;
//first and last char for studentID
char Fchar,Lchar, Num1, Num2, Grade;
int TmpVal = 0; //temporary value
cin >> TmpVal;
while(TmpVal != -1) //reading in TOTAL POINTS
{
Totalpoints += TmpVal; //add scores onto each other
cin >> TmpVal; //read in next value
}
while(cin) //WHILE LOOP ISSUE HERE!
{
//read in student initials
cin >> Fchar >> Num1 >> Num2 >> Lchar >> TmpVal;
while(TmpVal != -1)
{
Earnedpoints += TmpVal; //read in points earned
cin >> TmpVal;
}
//calculate percentage
Percentage = ((double)Earnedpoints / Totalpoints) * 100;
AvgPercentage += Percentage;
NumClass++;
if(Percentage >= 90) //determine grade for student
Grade = 'A';
else if(Percentage >= 80 && Percentage < 90)
Grade = 'B';
else if(Percentage >= 70 && Percentage < 80)
Grade = 'C';
else if(Percentage >= 60 && Percentage < 70)
Grade = 'D';
else if(Percentage < 60)
Grade = 'F';
//display information on student
cout < left < Fchar < Num1 < Num2 < setw(LTAB) < Lchar < right < setw(RTAB-3) < Earnedpoints < setw(RTAB) < Percentage < setw(RTAB) < Grade < endl;
TmpVal = Earnedpoints = 0;
}
AvgPercentage /= NumClass;
cout < endl < left < setw(LTAB+20) < "Class size: " < right < setw(RTAB) < NumClass < endl;
cout < left < setw(LTAB+20) < "Total points possible: " < right < setw(RTAB) < Totalpoints < endl;
cout < left < setw(LTAB+20) < "Average point total: " < right < setw(RTAB) < AvgPoints < endl;
cout < left < setw(LTAB+20) < "Average percentage: " < right < setw(RTAB) < AvgPercentage < endl;
}