我正在开发一个程序,该程序需要从用户询问学生姓名开始。程序提示 用户的学生测验分数。当用户输入-99时,程序将根据以下比例计算平均字母等级和相应字母等级:
程序需要显示学生姓名,他们的平均水平和字母等级。程序需要询问他们是否要处理另一个学生,答案是否是“ Y”或是否再次重复“ y”处理,否则,程序退出。
1)当我运行程序时(输入学生的姓名:)首先显示,这显示正确,然后按Enter。
2)当我输入99,88,77,69时,输出正确。当我输入这两个-1、101时输出正确,但是当我输入-99时显示错误的输出。
3)当我输入我的名字时,然后显示-99我的名字,nan和A表示那是不正确的。但是,您是否希望正确处理其他学生的显示
4)当我选择小写的y和n时,程序可能会退出而不显示美好的一天。
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
const int SENTINEL = -99;
string student_name;
int quiz_Score, counter = 0, accumulator =0;
double average;
char grade, user_input;
cout << "Enter the name of the student:" << endl;
getline(cin, student_name);
cout << "Enter the score of the quiz between 1 and 100: " << endl;
cin >> quiz_Score;
while (quiz_Score != SENTINEL)
{
while (quiz_Score < 0 || quiz_Score > 100)
{
cout << "Value out of range" << endl;
cout << "Enter a quiz score between 1 and 100: " << endl;
cin >> quiz_Score;
}
counter ++;
accumulator = accumulator + quiz_Score;
cout << "Enter the score of the quiz between 1 and 100: " << endl;
cin >> quiz_Score;
}
average = static_cast<double>(accumulator) / counter;
if (average > 0 && average < 60)
{
grade = 'F';
}
else if (average >= 60 && average < 70)
{
grade = 'D';
}
else if (average >= 70 && average < 80)
{
grade = 'C';
}
else if (average >= 80 && average < 90)
{
grade = 'B';
}
else
{
grade ='A';
}
cout << "----------------------------------------------------------------------------------" << endl;
cout << setw(20) << student_name << setw(20) << average << setw(20) << grade << endl;
cout << "----------------------------------------------------------------------------------" << endl;
cout << "Would you like to process another student (Y/N): " << endl;
cin >> user_input;
cin.sync();
if (user_input == 'N'){
cout << "Have a good day" << endl; }
if (user_input == 'Y')
{
cout << "Enter the name of the student:" << endl;
getline(cin, student_name);
cout << "Enter the score of the quiz between 1 and 100: " << endl;
cin >> quiz_Score;
while (quiz_Score != SENTINEL)
{
while (quiz_Score < 0 || quiz_Score > 100)
{
cout << "Value out of range" << endl;
cout << "Enter a quiz score between 1 and 100: " << endl;
cin >> quiz_Score;
}
counter ++;
accumulator = accumulator + quiz_Score;
cout << "Enter the score of the quiz between 1 and 100: " << endl;
cin >> quiz_Score;
}
average = static_cast<double>(accumulator) / counter;
if (average > 0 && average < 60)
{
grade = 'F';
}
else if (average >= 60 && average < 70)
{
grade = 'D';
}
else if (average >= 70 && average < 80)
{
grade = 'C';
}
else if (average >= 80 && average < 90)
{
grade = 'B';
}
else
{
grade ='A';
}
cout << "----------------------------------------------------------------------------------" << endl;
cout << setw(20) << student_name << setw(20) << average << setw(20) << grade << endl;
cout << "----------------------------------------------------------------------------------" << endl;
}
return 0;
}
答案 0 :(得分:1)
如果您输入的第一个分数是-99,那么您的输入循环将立即停止。此时accumulator
和counter
仍为0,因此语句
average = static_cast<double>(accumulator) / counter;
计算0/0。未定义,因此结果为NaN
。
要为第二位学生输入数据,而不必为第一位学生复制代码,则应使用另一个循环。
最后,当您问是否要回答另一个学生的数据时,您仅针对N
和Y
而不是针对y
来检查答案。因此,如果输入y
,则两个分支都不执行。代码只是悄无声息地退出。