因此,我们的想法是向用户询问数组的每个元素,但在为第一个问题(它要求元素数量)提供输入后,没有任何反应。无法弄清楚原因。
#include <iostream>
int main()
{
int numGrades;
tryAgain:
std::cout << "Enter number of grades" << std::endl;
std::cin >> numGrades;
if (numGrades > 30)
{
std::cout << "Please enter a valid number of grades" << std::endl;
goto tryAgain;
}
int grades[numGrades - 1];
int gradeCount = 0;
while (gradeCount < numGrades);
{
std::cout << "Enter grade number" << gradeCount + 1 << ":";
std::cin >> grades[gradeCount];
++ gradeCount;
}
std::cout << grades;
return 0;
}
答案 0 :(得分:6)
构建while (true) {}
表示while (gradeCount < numGrades);
{
// ...
}
(即无限循环)。
所以,当你写
while (gradeCount < numGrades)
{
}
{
// ...
}
您有以下内容:
gradeCount < numGrades
如果{{1}},则永远不会执行第二个阻止。
答案 1 :(得分:1)
您正在使用
while (gradeCount < numGrades);
在这一行的末尾有一个分号(;),因此下一行不会被执行,因为条件总是为真,因为相应变量中没有增量或减量。
简而言之,只需删除(;)
即可
while (gradeCount < numGrades)
答案 2 :(得分:0)
请看这段代码,问题很少。一个是分号,而循环&amp;另一个是打印grades
&amp; grades
的内存分配。内存静态分配必须需要一个常量值。这里添加了动态分配,因为成绩数不固定或不变......以下是代码:
#include <iostream>
int main()
{
int numGrades;
tryAgain:
std::cout << "Enter number of grades" << std::endl;
std::cin >> numGrades;
if (numGrades > 30)
{
std::cout << "Please enter a valid number of grades" << std::endl;
goto tryAgain;
}
int *grades = (int *)malloc(numGrades * sizeof(int)); //allocating dynamic memory
int gradeCount = 0;
while (gradeCount < numGrades)
{
std::cout << "Enter grade number" << gradeCount + 1 << ":";
std::cin >> grades[gradeCount];
++ gradeCount;
}
for(int i =0;i<numGrades;i++)
{
std::cout << grades[i] << std::endl;
}
free(grades);//releasing memory
return 0;
}