У вас две проблемы с кодом, который вы показываете.
Сначала давайте поговорим о проблеме, о которой вы спрашиваете ... Вы отображаете значение закодированного символа. Все символы в C кодируются так или иначе. Наиболее распространенная схема кодирования называется ASCII , где цифры кодируются с '0'
, начиная с 48
до '9'
с 57
.
Используя эти знания, это должно бытьДовольно легко найти способ преобразования цифр в целочисленные значения: вычтите символ '0'
. Как и в
int nilai1 = nilai[i] - '0'; // "Convert" digit character to its integer value
Теперь для второй проблемы: строки в C на самом деле называются завершенными нулями байтовыми строками . Этот бит с нулевым символом в конце весьма важен, и все строковые функции (например, strlen
) будут искать его, чтобы узнать, когда заканчивается строка.
Когда вы вводите пять символов для *При вызове 1027 * функция scanf
запишет нулевой терминатор в шестую позицию в массиве из пяти элементов. То есть выходит за границы и приводит к неопределенному поведению .
Вы можете решить эту проблему, либо увеличив массив, либо сказав scanf
не писать большесимволов в массиве, чем он может уместиться:
scanf("%4s", nilai); // Read at most four characters
// which will fit with the terminator in a five-element array