В этом случае, когда вы используете getchar (), он возвращает int, но со значениями char. В символах числа от 0 до 9 на самом деле хранятся в числовом виде не от 0 до 9, а от 48 до 57. То есть «0» - это не то же самое, что 0, но фактически то же, что и 48. Поэтому в в этом случае, скажем, с '0'. Если вы только что сделали nDigits [c], это было бы то же самое, что и nDigits [48], когда вам нужно nDigits [0], поэтому вам нужно сделать nDigits [c - '0'], что переводится в nDigits [48 - 48], что это nDigits [0] ... это то, что вы хотите!