如何使用带有数组的while循环?

新手上路,请多包涵

我创建了一个程序,允许用户输入 10 个等级。我使用了一个 while 循环将成绩存储在数组中,但如果用户只有 5 个成绩要输入,他可以键入 done 退出程序。

循环完成后,它将计算并显示。数组中的最高等级、最低等级和平均等级

不幸的是,当用户键入完成时,程序将显示其余未输入的成绩行。

你能帮我找出如何阻止while循环显示循环的其余未输入成绩吗?

 #include <iostream>
using namespace std;

int main()
{
const int SIZE = 10;
int grade[SIZE];
int count = 0;
int lowestGrade;
int highestGrade;
bool done = false;

cout << "This program is limited to entering up to 10 grades." << endl;

while ( grade[count] != done && count < SIZE)
{

    cout << "Enter a grade #" << count + 1 << " or done to quit: ";
    cin >> grade[count];
    count++;

}

//LOWEST GRADE
lowestGrade = grade[0];
for (count = 0; count < SIZE; count++)
    if (grade[count] < lowestGrade)
    {
        lowestGrade = grade[count];
    }

//HIGHEST GRADE
highestGrade = grade[0];
for (count = 0; count < SIZE; count++)
{
    if (grade[count] > highestGrade)
    {
        highestGrade = grade[count];
    }
}

//AVERAGE GRADE
double total = 0;
double average;
for (int count = 0; count < SIZE; count++)
    total += grade[count];
average = (total / SIZE);

cout << endl;

cout << "Your highest grade is: " << highestGrade << endl;
cout << "Your lowest grade is: " << lowestGrade << endl;
cout << "Your average grade is: " << average << endl;

system("pause");
return 0;

}

原文由 Chriskt 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 430
2 个回答

这是您的代码的两个问题。

第一的:

 ....
cout << "Enter a grade #" << count + 1 << " or done to quit: ";
cin >> grade[count];
count++;
....

上面的代码将尝试将单词“done”读入整数变量,产生 0。不是你想做的!

第二

 ...
for (count = 0; count < SIZE; count++)
...

上面的代码将尝试遍历所有可能的元素(SIZE)。但是,您可能已经比这更少了!您需要使用在上一个循环中计算的 count 作为您的边界(当然,在循环中为控制变量使用不同的名称)。

原文由 SergeyA 发布,翻译遵循 CC BY-SA 3.0 许可协议

这里有几件事要解压。

基本上,您要检索的输入是 char \* 并且 >> 运算符将其转换为 int 以适合您的成绩数组。

接下来,您使用 grade[count] != done 检查的是,id 为“count”的“grade”中的整数是否不等于 bool false。在这种情况下,这将始终返回 true。

对于您的用例,您要检查的是您的输入是否等于 char \* “done”

这不会发生在 while 循环的谓词中,因为您的等级数组仅存储 int

因此,我认为解决该问题的最简单方法是检查输入是否等于“完成”。如果您想将 done 布尔值设置为 true 否则我们可以尝试将其转换为 int 并将其存储在 Grades 数组中。

这是修改后的循环:

 while (!done && count < SIZE)
{
    cout << "Enter a grade #" << count + 1 << " or done to quit: ";

    string input = "";
    cin >> input;

    if (input == "done")
    {
        done = true;
    }
    else
    {
        grade[count] = stoi(input);
    }

    count++;
}

以下内容有点超出了问题的范围,但使用 stoi() 的另一个好处是它忽略了不是数字的输入,这将防止有人输入无效输入,如“土豆”。这就是为什么我立即将输入转换为字符串的原因。

原文由 Pierre Fouilloux 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题