Другие уже ответили на ваши первые два вопроса правильно, поэтому я отвечу на ваш третий вопрос:
Когда вы вводите character
и нажимаете клавишу ВВОД, в буфер ввода помещаются два символа: character
и символ newline
.
Вам необходимо учесть оба эти момента. Поэтому сначала scanf
потребляет символ новой строки, а другой читает символ.
Пошаговый анализ кода:
printf("enter string \n");
scanf("%s",&str);
С двумя приведенными выше утверждениями вы видите Enter the string
, и программа ожидает вашего ввода.
Предположим, вы ввели символ C
и один раз нажали Enter. При выполнении этого действия входной буфер получает два символа:
- введенный вами символ
C
&
- Символ новой строки
\n
Оператор scanf
читает только один символ (C
) из входного буфера. Таким образом, символ newline
остается непрочитанным в буфере Inuput.
printf("enter char \n");
scanf("%c",&ch); //does not scan my char
При наличии двух приведенных выше операторов отображается enter char
, но scanf
просто пропускает (не ожидает ввода пользователя), это потому, что непрочитанный символ newline
во входном буфере читается этим scanf
.
Таким образом, для правильного получения следующего входного символа вам понадобится дополнительный scanf
.
scanf("%c",&ch); //with this second line do scan my char