После того, как я проверю, что количество цифр равно 5, я хочу вернуть неизменное значение n

#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 as 5 , например, then count никогда не увеличивается, поэтому оно остается равным 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  ;
}