프로그램에서 cin 루프를 종료하는 데 문제가 있습니다. 내 프로그램이 파일 hw07data의 입력에서 읽어 리눅스 리디렉션을 사용, 데이터 파일은 다음과 같이 :Cin 루프가 종료되지 않음
100 20 50 100 40 -1
A34F 90 15 50 99 32 -1
N12O 80 15 34 90 22 -1
첫 번째 부분은 클래스의 총 포인트이며, 다음 줄은 다음에 학생 ID 번호 그들의 점수는 모두 -1로 끝납니다.
내 문제 : 나는 hw07data < ./a.out, 누군가가 내 코드를 통해보고 나에게 몇 가지 힌트를 줄 수있는 명령을 실행할 때 내 while 루프는 종료하지? 나는 대답을 원하지 않는다. 숙제이기 때문에, 나는 단지 약간의 지침이 필요하다. 감사!!
#include <iostream>
#include <iomanip>
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;
}
출력이 계속해서 새로운 입력을 요청합니다.
표준 입력에서 EOF를 수신하면 종료하려고합니까? 여기를 참조하십시오 : http://stackoverflow.com/questions/3197025/end-of-fileeof-of-standard-input-stream-stdin –
코드를 약간 정리하기 위해'struct'를 사용할 것을 권장합니다. – andre
우리 수업의 과제에 대한 엄격한 지침을 따라야합니다. 또한 구조체 사용을 고려했지만 선생님은 어떤 고급 기술을 사용해도 실패하게됩니다. –