Если это именно та программа, которую вы отправили, ваш учитель не очень хорошо читает ваш код. Существует совсем другая проблема.
Если бы вы написали scanf("%c", &voto);
, тогда комментарии вашего учителя имели бы определенный смысл, хотя, похоже, они подразумевают, что C может привести к тому, что символ '1' будет значение 1, что, конечно, не так. Если вы действительно ожидаете только один символ, вы можете избежать этого, хотя вам придется изменить все другие значения, с которыми вы сравниваете voto
, на литералы символов, поскольку, например, значение символа '1'
49. В любом случае, это не сработает, потому что вам явно требуется умение читать число 10. Длина его составляет два символа.
Но вы правы, что unsigned char
будет преобразовано в int
.
В вашей действительной программе или, по крайней мере, той, что вставлена здесь, вы на самом деле написали
scanf("%d", &voto);
, и это, безусловно, не правильно. Спецификатор преобразования %d
должен иметь указатель на int
в качестве соответствующего аргумента; поскольку это не так, это неопределенное поведение. На практике вполне вероятно, что scanf
будет рассматривать данный указатель как указатель на несуществующий int
, и это означает, что локальные переменные, которые находятся в окрестности voto
, будут перезаписаны. (Хуже всего может случиться; это просто, чтобы дать вам представление.)