#c
#c
Вопрос:
Я пытаюсь работать над программой, в которой пользователь вводит случайное число, а программа вводит список от 0 до 9.
Например, предположим, что пользователь вводит число 12, тогда экран должен выглядеть следующим образом:
0123456789012
Где «2» в конце указывает на 12-е число. Я пробовал это, но это дает мне бесконечный цикл, и я не знаю, как сказать ему остановиться:
for(i = 0; i < cells; i ) {
i = i%10;
printf("%d", i);
}
Ячейки здесь — это число, которое вводит пользователь.
Комментарии:
1. Пройдитесь по этому коду в отладчике (или просто запустите его на бумаге) и посмотрите, что произойдет с
i
. Подумайте о двух разных задачах, которыеi
выполняются в этом коде, и является ли это частью проблемы.
Ответ №1:
Проблема в том, что вы меняетесь i
в цикле. Вы должны выполнить итерацию столько раз, сколько вводится данных. Вы почти на месте, но вы зацикливаетесь вечно, потому что вы изменяете i
таким образом, что оно никогда не будет больше или равно cells
for cells > 10
.
Попробуйте это:
for( int i = 0; i < cells; i ) {
printf( "%d", i % 10 );
}
Также…
0123456789012
Где «2» в конце указывает на 12-е число.
Второй 2
— это 13-й номер, а не 12-й 🙂
Ответ №2:
Не изменяйте исходную переменную внутри цикла! Создайте новую переменную для хранения значения i
.
Комментарии:
1. Когда я помещаю i = i% 10; вне цикла, программа игнорирует это
2. @NeedarealJob: Вам нужно изучить время жизни переменной и область видимости.
3. Если вы действительно не понимаете, что происходит, тогда возьмите карандаш и лист бумаги и самостоятельно просмотрите программу, изменяя i по ходу работы, и вы обнаружите, в чем проблема и почему.
4. Я не представлял, что мы могли бы сказать i% 10 в строке printf. Теперь я понял.
Ответ №3:
Вы не хотите устанавливать i = i
. Создайте другую переменную и установите для нее значение i
Ответ №4:
Когда вы это делаете, i = i;
вы фактически изменяете содержимое i
, которое цикл использует для подсчета. Что вы должны делать вместо этого, так это либо вычислять mod внутри printf, например
printf("%d", i);
или сохранение мода в другой переменной и печать такого
mod_i = i % 10;
printf("%d", mod_i);
Ответ №5:
Проблема в том i = i
, что вы меняете значение i
на i % 10
. Так что cells
больше 10, в какой-то момент у меня будет значение 10 в начале цикла, а затем мне будет присвоено значение 0 ( 10 % 10
). Следовательно, ваш цикл будет повторяться вечно, поскольку i < cells
всегда будет false .
Решение состоит в том, чтобы удалить назначение полностью и просто printf("%d", i % 10)
.