Используйте это:
char temp[2];
scanf("%1s",temp);
ch = temp[0];
и используйте gets
scanf
при использовании с char
s имеет некоторые проблемы (он получает "старую" новую строку). Здесь мы немного «обманываем» и используем scanf
, чтобы получить строку, которая может иметь до одного символа. Строка из 1 символа явно нуждается во втором символе для терминатора, поэтому массив из 2 символов.
Имейте в виду, что используя scanf
для поиска символа, вы не сможете вставить пробел.
Обратите внимание, что gets
является "злой" функцией. Используя его, вы можете легко переполнить буфер (он не проверяет, достаточно ли велик буфер). «Правильный» способ сделать это обычно: fgets(mystr, N, stdin);
(вариант «file» для gets
имеет максимальное количество символов, которое может быть прочитано, и в конце добавляется \0
). Обратите внимание, что если вы вставите 150 символов в fgets
, 99 перейдет к вашей строке (потому что вы задали максимальный размер 100), будет добавлено 1x \0
, а остальные символы останутся в буфере, «готовом» для далее scanf
/ gets
/ fgets
... (чтобы проверить его, уменьшите буфер до меньшего значения, например, 5 символов, и проведите несколько тестов)