Ваша функция get_number
всегда возвращает 0, потому что вы никогда ничего не назначаете переменной value
. Я предполагаю, что вы хотите:
value = value*10 + (c - '0');
Вместо
c = value;
Для уточнения:
Вы читаете цифру цифра за цифрой (с getchar
вы читаете один символ). Допустим, вы прочитали цифры 1 2 3
:
Когда вы читаете 1
, вы делаете value = value*10 + ('1' - '0')
, что означает value = 0 + 1 = 1
.
Когда вы читаете 2
, вы делаете то же самое и получаете value = 1*10 + ('2' - '0')
, что означает value = 12
.
То же самое для 3
.
Что вам нужно понять, так это то, что умножение чего-либо на 10 добавляет 0 в конце этого чего-то. Добавление цифры к чему-либо, заканчивающемуся нулем, заменяет этот 0 на эту цифру.
Вы также должны понимать, что имеете дело с символами, которые на самом деле являются целыми числами. Символ '0'
представлен кодом ASCII, скажем, x
. '1'
представлен x + 1
и т. Д. Если бы вы напечатали значение '0'+'3'
, это не было бы 3
, как вы ожидаете. Вот почему мы вычитаем '0'
(то есть x
) из символов, чтобы получить действительные цифры.
Надеюсь, это прояснит некоторые вещи.