【问题标题】:C++ Nested for loops incorrect outputC ++嵌套for循环错误输出
【发布时间】:2017-03-31 04:35:13
【问题描述】:

我正在尝试制作一个程序,该程序从用户那里接收 4 个学生姓名和每个学生的 3 个考试成绩。在显示每个名称及其 3 个测试分数时,我遇到了问题。 例如,如果我有 John、Bob、Michael 和 Mary,则所有 4 个学生都会显示 Mary 的 3 个考试成绩。

这是我从用户那里获取数据的函数:

void Student::getName()
{
    for (int i = 0; i < 4; ++i)
    {
        cout << "Enter name: ";
        cin >> name[i];
        for (int j = 0; j < 3; j++)
        {
            cout << "Enter grade: ";
            cin >> testScores[j];
        }
    }
}

这是我用于显示数据的功能:

void Student::setName()
    {
        for (int i = 0; i < 4; ++i)
        {
            cout << "\nName: " << name[i] << endl;
            for (int j =0; j <3; j++)
            {
                cout << "Grade: " << testScores[j] << endl;
            }
        }
    }

第一个函数工作正常,但第二个函数的输出有问题。有什么建议么?谢谢。

【问题讨论】:

  • 每次通过内部循环都会覆盖相同的 3 个分数。您没有每个学生的单独分数。
  • 因为你每次都会覆盖测试分数[j]。这具有最后输入的值。
  • 您的 testScores 仅包含上次更新的成绩。您可以创建一个具有 name 和 testScore[3] 的结构。
  • 为什么你的Student 类有一个名称数组?每个学生都应该有一个 Student 对象。它应该只有一个 name 成员,以及该学生的一系列分数。
  • 你的函数名是倒序的。通常setXXX 用于给某物赋值,getXXX 用于检索值。

标签: c++ arrays function for-loop nested-loops


【解决方案1】:

使testScores 成为一个二维数组而不是一维数组,否则您将用学生 2 的成绩覆盖学生 1 的成绩,而学生 2 的成绩又会被学生 3 的成绩覆盖,依此类推,您只剩下学生的成绩4.

int testScores[4][3];

然后

替换

cin &gt;&gt; testScores[j];

cin &gt;&gt; testScores[i][j];

在第一个函数中。

替换

cout &lt;&lt; "Grade: " &lt;&lt; testScores[j] &lt;&lt; endl;

cout &lt;&lt; "Grade: " &lt;&lt; testScores[i][j] &lt;&lt; endl;

【讨论】:

  • 你说得对,它现在可以工作了。非常感谢!
猜你喜欢
  • 2019-03-12
  • 2012-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多