收集学生成绩,计算平均成绩,字母成绩并使用C ++显示

时间:2019-10-20 11:09:37

标签: c++

我正在开发一个程序,该程序需要从用户询问学生姓名开始。程序提示 用户的学生测验分数。当用户输入-99时,程序将根据以下比例计算平均字母等级和相应字母等级:

  • 0-59 = F
  • 60-69 = D
  • 70-79 = C
  • 80-89 = B
  • 90-100 = A

程序需要显示学生姓名,他们的平均水平和字母等级。程序需要询问他们是否要处理另一个学生,答案是否是“ 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;

}

1 个答案:

答案 0 :(得分:1)

如果您输入的第一个分数是-99,那么您的输入循环将立即停止。此时accumulatorcounter仍为0,因此语句

average = static_cast<double>(accumulator) / counter;

计算0/0。未定义,因此结果为NaN

要为第二位学生输入数据,而不必为第一位学生复制代码,则应使用另一个循环。

最后,当您问是否要回答另一个学生的数据时,您仅针对NY而不是针对y来检查答案。因此,如果输入y,则两个分支都不执行。代码只是悄无声息地退出。