Member 13892651 Ответов: 2

Моя программа не считает цифры после 9 цифр


//Вычисляет количество цифр в целое число, используя while и Do

#include <stdio.h>

int main(void)

{
    int digits  = 0, num;

    printf("Enter a nonnegative integer: ");
    scanf("%d", &num);

    do{
        num /= 10;
        digits++;
      }
    while (num > 0);

    printf("Number of digits in your integer is %d\n", digits);

    return 0;
}


Что я уже пробовал:

Когда я ввожу 11 значный intiger он показывает 1 цифру

Rick York

Было бы проще принять входные данные в виде строки, а затем подсчитать числа.

2 Ответов

Рейтинг:
1

Clifford Nelson

Я предполагаю, что это происходит потому, что вы преобразуете значение в int.

An int variable stores the actual binary value of the integer it is assigned. In the declaration of int x = 564, the variable x stores the binary value of the integer number 564. An int variable can store 4 bytes of data, which means the value of an int can hold range between -2,147,483,648 and +2,147,483,647

если вы введете "1111111111", то на самом деле будете считать до 10, а не до 9


Member 13892651

Как бы я это исправил

Clifford Nelson

Я не специалист в языке Си, но, похоже, вам нужно прочитать строку:
получает( str );
и чтобы получить длину
strlen(str );
Как я уже сказал, Я не специалист в C


Рейтинг:
1

Patrice T

Цитата:
Когда я ввожу 11 значный intiger он показывает 1 цифру

С помощью отладчика вы увидите, что делает ваш код, обратите внимание на значения переменных.

Ваш код ведет себя не так, как вы ожидаете, и вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что вы должны делать, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.
Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]
1.11 — отладка программы (пошаговое выполнение и останова) | выучить C++[^]
Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.


Member 13892651

Итак, что я могу сделать, чтобы исправить это

Patrice T

Каждый тип данных ограничен, Вы достигли целочисленного предела, изучите доступные типы и выберите тот, который соответствует вашим потребностям.