2016-09-19 3 views
4

Итак, идея состоит в том, чтобы спросить пользователя о каждом элементе массива, но после ввода ввода для первого вопроса (где он запрашивает количество элементов) ничего не происходит. Не могу понять, почему.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; 
} 
+0

использовать отладчик. – Amit

+10

Похоже, у вас точка с запятой после цикла while;) – Passersby

+1

Точка с запятой в конце while() может быть преступником. Проверьте [этот вопрос для получения дополнительной информации] (http://programmers.stackexchange.com/questions/202734/putting-semicolons-after-while-and-if-statements-in-c) – hssay

ответ

6

while (true); означает О построении while (true) {} (т.е. бесконечного цикла).

Итак, когда вы пишете

while (gradeCount < numGrades); 
{ 
    // ... 
} 

у вас есть следующие:

while (gradeCount < numGrades) 
{ 
} 

{ 
    // ... 
} 

Второй блок никогда не будет выполнена, если gradeCount < numGrades.

0

См. Этот код, было несколько проблем. Один - точка с запятой, пока цикл & другой печатает grades & выделение памяти 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; 
} 
+0

Я бы рекомендовал вам прочитать о «массивах переменной длины» (может быть здесь: http://stackoverflow.com/questions/1887097/variable-length-arrays-in-c). Мы не знаем, что компилятор использует CptJohnMiller74, но вполне возможно, что этот код будет скомпилирован на его стороне. – Ilya

+0

спасибо, да это может отличаться от компилятора к компилятору ... –

1

Вы используете

while (gradeCount < numGrades); 

с запятой (;) на конец этой строки, поэтому следующая строка не будет выходить, потому что условие всегда истинно, поскольку в соответствующих переменных нет приращения или уменьшения.

Короче просто удалить (;)

while (gradeCount < numGrades)