#c #while-loop
#c #во время цикла
Вопрос:
Я хочу проверить, имеет ли введенное число 5 цифр или нет, поэтому я использую для этого цикл while.
while(n>=10)
{
n = n/10;
count ;
}
if(count != 5)
return 0;
Но в следующих частях моего кода используется обновленное значение n, и я этого не хочу.Как я могу сказать «использовать первое значение n» для своего кода?Вот весь мой код (он работает плавно, когда я удаляю часть конфигурации):
#include <stdio.h>
int main(void)
{
int digit=0,n,count=0;
scanf("%d",amp;n);
while(n>=10)
{
n = n/10;
count ;
}
if(count != 5)
return 0;
for(int i=0; i<5; i )
{
digit = n%10;
n /= 10;
}
printf("%d",digit);
}
Комментарии:
1. Используйте другую переменную, например
int tempn = n;
2. Обратите внимание, что ваш цикл недооценивает количество цифр; если вы вводите
n
as5
, например, thencount
никогда не увеличивается, поэтому оно остается равным 0. Вероятно, вам следует инициализироватьcount
1
(или переключиться наdo
…while
цикл. Вы также должны проверить, чтоscanf()
это успешно. Кроме того, возврат нуля изmain()
указывает на успех; вы, вероятно, не должны указывать на успех, когда ваша проверка завершается неудачей. Вероятно, вам также следует сообщить об ошибке с сообщением. И вы обязательно должны завершить печать новой строкой.3. @JonathanLeffler в больших проектах мы называем это воспроизводимой ошибкой 1/100, пока тестировщик не определит правильный ввод для воспроизведения ошибки. Это кошмар.
4. Создайте функцию, подобную
int digitCount(int n) { ... }
.5. @JonathanLeffler Да, я просто узнаю, когда это не сработало: D Спасибо за советы. Но как я могу сказать «Если этот цикл введен, перестает работать»
Ответ №1:
Используйте другую временную переменную для проверки ошибок. Таким образом, ваша исходная переменная останется нетронутой.
int temp = n;
while(temp>=10)
{
temp = temp/10;
count ;
}