для char|для wchar_t|Назначение
--|--|--
``getchar()`` `->` ``int``|``getwchar()`` `->` ``wint_t``|Ввод одного символа. Возвращает код введенного символа или EOF (конец файла)
``scanf(fmt,...)`` `->` ``int``|``wscanf(wfmt,...)`` `->` ``int``|Форматированный ввод. Возвращает количество успешно введенных значений или EOF (конец файла)
Код символа принимает значение от 0 до 255 (буква 'я'). Значение константы EOF равно `-1`. При сохранении результата в char невозможно отличить ввод буквы 'я' от конца файла.
Пример ввода по одному символу:
```run-c
#include <stdio.h>
int main()
{ int a,b;
a=getchar();
b=getchar();
printf("%d %d\n",a,b);
}
<<
AB
```
Проверьте, какой результат возвращает getchar в этом примере для пустых входных данных. Измените тип переменных a,b на char и введите символ 'я'.
Для имитации конца файла в консоли в Windows нужно нажать Ctrl-Z, затем Enter, в Linux - Ctrl-D.
Для функции ``scanf`` первым аргументом нужно указать строку, содержащую спецификаторы формата - по одному для каждого следующего аргумента. Перед переменными в списке аргументов, в которые будут помещены введенные значения, должна быть указана операция ``&`` (получение адреса), кроме аргументов, соответствующих строкам.
В спецификаторе формата после % можно указать:
* символ ``*``, который означает, что значение по этому формату будет введено, но не будет помещаться в очередной аргумент;
* максимальное количество символов, вводимых по указанному спецификатору.
- Все непробельные символы в формате интерпретируются как обязательные символы, присутствующие во вводе. При несовпадении очередного вводимого символа и символа в формате выполнение ввода завершается с ошибкой.
- Пробельные символы в формате приводят к пропуску последовательности пробельных символов во вводе. Ввод будет продолжен с первого непробельного символа. К пробельным символам относятся ' ','\t' и '\n'.
- Все спецификаторы формата, кроме ``%с`` и ``%[``набор``]`` пропускают пробельные символы перед началом ввода. Ввод завершается при обнаружении первого символа, не соответствующего спецификатору, или при достижении ограничения на количество символов. Если ни одного символа, соответствующего спецификации не было введено, выполнение ввода завершается с ошибкой.
Спецификатор %s означает ввод непустой последовательности непробельных символов.
Пример ввода с ограничением количества символов.
```run-c
#include <stdio.h>
int main()
{ int a,b,r;
r=scanf("%1d%d",&a,&b);
printf("r=%d a=%d b=%d\n",r,a,b);
}
<<
12345
```
Пример пропуска символов при вводе даты в формате d/m/y:
Пример пропуска пробельных символов при ввода числа:
```run-c
#include <stdio.h>
int main()
{ int k,r;
char c;
r=scanf("%d%c",&k,&c);
printf("r=%d k=%d c=%d\n",r,k,c);
}
<<
10a
```
Проверьте, какой результат возвращает scanf в этих примерах для неправильных и пустых входных данных.