如何使程序将数据正确传递给数组? (家庭作业)

时间:2019-01-26 21:55:25

标签: c++ c++11

我已经将数组大小设置为20(假设计数为0,我将其设置为19)。我将for循环设置为仅在gradeCount <=到gradeCounted时运行,无论输入数据多少次它都将继续运行。如果我输入3个成绩而不在每个成绩之间按回车键,例如“ 23 23 23”,它将连续3次返回“输入成绩”,而对于我输入的尽可能多的成绩,用空格分隔。我不明白为什么它没有将数据传递到数组中并正确结束for循环。我确定我的代码很丑陋,抱歉。

此外,在将代码输入stackoverflow时,它说要缩进4个空格以格式化吗?我最初无法使用代码按钮缩进代码,也没有{}按钮。我想念什么?只有在通知修复它之后,我才能够这样做。谢谢您的宝贵时间,我不想为你们而烦。

//This program asks user how many grades there are, inputs grades, and  displays median of said grades.

#include <iostream>
using namespace std;

//Variables
////////////////////const int limitGrades = 20; //Array "boxes"? //Ignore this //for now.
int gradeCounted; //Number of grades from user.
const int SIZE = 19;

//Array
float grades[19]; //Max grades that can be entered.

//Functions
void gradeTaker()
{
    cout << "You may input up to 20 grades. \n";
    cout << "First enter the number of grades you have: \n";
    cin >> gradeCounted;
    //requests how many grades there are and stores them in array
    for (int gradeCount = 0; gradeCount <= gradeCounted + 1; gradeCount++)
    {
        for (float &grade : grades)
        {
            cout << "Enter grade: \n";
            cin >> grade;
        }
    }
};

int main()
{
    gradeTaker();

    cout << "grades so far";
    for (int grade : grades)
        cout << grade << endl;

    system("pause");
}

1 个答案:

答案 0 :(得分:1)

数组的大小与访问方式分开。访问20个值等效于访问从0到19的索引。

float grades[20];
for(size_t i = 0; i < 20; i++){ // print all values of grades
  std::cout << grades[i] << "\n";
}

此外,您在for中的gradeTaker循环将要求您为grades的每个索引提供总共gradeCounted + 2次的值。要解决此问题,只需遍历要为其分配值的索引,如下所示:

for (int gradeCount = 0; gradeCount < gradeCounted; gradeCount++){
  cout << "Enter grade: \n";
  cin >> grade[gradeCount];
}

最后,您的for函数中的main循环将遍历整个数组,其中可能包含未初始化的值。您应该初始化数组或使用std::vector之类的动态数据结构,而仅push_back必要的值。

(文本框中高亮显示代码,然后按CTRL+K进行缩进。)