Программирование на C, ввод списка, измененного на 10

#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) .