Я считаю, что хороший способ отладки программы - часто притворяться, что я компьютер, и пытаться пройти программу по одной строке за раз, чтобы увидеть, что я делаю.
Если я следую вашей программе Через несколько строк я получаю оператор
cin >> grade;
Итак, я читаю число с входа и устанавливаю grade
на это число.
Затем я ввожу while
л oop. Обратите внимание, что я никогда не возвращаюсь go к какой-либо строке ранее while
l oop. И нет другой строки программы, которая принимает какие-либо данные от cin
. Поэтому я никогда больше ничего не читаю с cin
.
Вы можете набрать все цифры, которые хотите, после первого. Программа не читает ни одного из них. Он занят выполнением того, что вы ему сказали, то есть продолжением цикла, пока grade
не равно -1. Он будет продолжаться до тех пор, пока что-то еще не остановит запуск программы, потому что grade
никогда не изменяется в l oop. Каждый раз, когда вы достигаете вершины l oop, grade
по-прежнему равен первому введенному вами номеру.
Кстати, if
с break
в конце l oop полностью избыточен. Если у вас не было этого if
, программа затем вернулась бы go к вершине l oop, а затем, если grade
было равно -1, она бы завершилась. Так что в любом случае вы выходите в конце l oop, если grade
становится -1 в течение l oop.