Вы используете char
, который может хранить только значения между -128
и +127
. Вместо этого используйте другой тип данных, чтобы получить гораздо больший диапазон.
Таким образом, вместо
char deci = 0;
использование int
int deci = 0;
и даже если оно переполняет вы можете использовать unsigned int
(как код только читает неотрицательные значения)
unsigned int = 0;
C Standar d гарантирует, что char
должен иметь ширину не менее 8 бит, short
и int
должен быть шириной не менее 16 бит, а long
должен иметь ширину не менее 32 бит и sizeof (char) <= sizeof (short) <= sizeof (int) <= sizeof (long)
(то же самое верно для неподписанных версий этих типов).
int
может быть от 16 до 64 бит в ширину в зависимости от платформы.
Также есть еще одна проблема с кодом, который может привести к ошибке при выполнении в будущем.
Ваш индекс массива i
является char
и компилятор должен дать вам
Предупреждение: индекс массива имеет тип «символ».
Это указано так, потому что тип char
может быть подписан или без знака - это зависит от компилятора. Если подписано char
, то возможно, что i
будет отрицательным, и в этом случае доступ к индексу отрицательного массива приведет к неопределенному поведению. Я настоятельно рекомендую вам посмотреть на это answer, чтобы избежать общей ошибки в будущем.
Совет: Всегда форматируйте свой код. Правильно, это поможет вам визуализировать, а также другим, кто пытается найти в нем проблемы.
Уход за водоворотом, чтобы объяснить, почему он отказался.
http://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – Biffen
Tha'ts много гольца переменных у вас там ... – John3136
'deci' - это просто' char' - вам нужно сделать его подходящим 'int'. –