#c #loops #do-while #cs50
#c #петли #do-while #cs50
Вопрос:
Я самообучаюсь, я работаю над проблемой роста населения, и я столкнулся с проблемой бесконечного выполнения цикла, когда я ввожу большое конечное число, которое я хочу достичь.
#include <cs50.h>
#include <stdio.h>
int main(void) {
// TODO: Prompt for start size
int n;
do {
n = get_int("Enter the starting size of your llamas: ");
} while (n <= 8);
// TODO: Prompt for end size
int j;
do {
j = get_int("Enter the Ending size of your llamas: ");
} while (j <= n);
// TODO: Calculate number of years until we reach threshold
int k = 0;
do {
n = n (n/3) - (n/4);
printf("The number is %in", n);
k ;
} while (n != j);
// TODO: Print number of years
printf("The number is %in", k);
}
Предполагается, что ответом будет количество лет, необходимое для достижения конечного размера лам, но я не могу ввести большие цифры конечного размера, не могли бы вы помочь мне выяснить, что не так, может быть, в моей математике или знаке. Заранее благодарю.
Комментарии:
1. Вы будете рады услышать, что вам не нужна ничья помощь, чтобы разобраться в этом, просто инструмент, который у вас уже есть: ваш отладчик! Это именно то, для чего нужен отладчик. Он запускает вашу программу по одной строке за раз и показывает вам, что происходит. Знание того, как использовать отладчик, является необходимым навыком для каждого разработчика C , без исключений. С помощью вашего отладчика вы сможете быстро находить все проблемы в этой и всех будущих программах, которые вы пишете, не обращаясь ни к кому за помощью. Вы уже пробовали использовать свой отладчик? Если нет, то почему бы и нет? Что вам показал ваш отладчик?
2. Итак, какие числа вы ввели, и что печатают все эти
printf
строки?3. Что произойдет, если
n
меньше, чемj
, ноn (n/3) - (n/4)
больше, чемj
?
Ответ №1:
Для больших чисел n
увеличивается больше, чем 1
на каждой итерации, поэтому возможно, что оно становится больше, чем j
без того, чтобы сначала быть равным ему.
Измените тест while(n != j);
на while(n < j);
Комментарии:
1. Кроме того, для
n < 9
этого может быть бесконечный цикл, когдаn/3 == n/4
(из-за целочисленного деления, которое усекается), в частности дляn = 1, 2, 4, 5, 8
.2. @dxiv: да, но цикл ввода повторяется
while (n <= 8);
3. Хороший улов, я пропустил эту часть.