C ++ while循环无法启动

时间:2016-09-19 04:43:40

标签: c++ while-loop

因此,我们的想法是向用户询问数组的每个元素,但在为第一个问题(它要求元素数量)提供输入后,没有任何反应。无法弄清楚原因。

#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;   
}

3 个答案:

答案 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;   
}