我已经将数组大小设置为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");
}
答案 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
进行缩进。)