Функция scanf предназначена для форматированного ввода исходной информации с клавиатуры:
scanf (управляющая строка, список адресов объектов ввода);
Список адресов объектов ввода представляет собой имена переменных, разделенные запятыми, перед каждой из которых указывается символ &, обозначающий здесь операцию «взять адрес».
В управляющей строке (заключенной в кавычки) указывается список спецификаторов форматов. Каждый спецификатор формата начинается с символа '%', за которым следует тип спецификатора, указывающий компилятору способ ввода объекта. Функция scanf () использует практически тот же набор модификаторов форматов, что и printf (), отличия от функции вывода следующие: форматы % f, % e, % g – эквивалентны. Для ввода коротких целых чисел (short) введен модификатор формата % h.
Вводить данные с клавиатуры можно как в одной строке через пробелы, так и в форме разных строк, нажимая после ввода текущего объекта клавишу Enter.
Поэтому функцией scanf () по формату % s строка вводится только до первого пробела. Для ввода произвольной строки текста, содержащей пробелы, используется функция:
|
|
gets (ID символьного массива);
В управляющей строке функции scanf (), как и в printf(), между спецификаторами формата можно помещать текст. Но предназначение его иное: если введенные данные окажутся разделены теми же символами, что и в управляющей строке, эти введенные символы будут пропущены. Это можно использовать для ввода значений, разделенных не пробелами, например:
scanf("%d:%d:%d", &hour, &min, &sec);
позволяет вводить с клавиатуры время в обычном формате.
Функцию scanf() также можно записывать в виде:
целая переменная = scanf (управляющая строка, список адресов объектов ввода);
При этом целая переменная получит значение, равное количеству успешно введенных объектов ввода. Например, после выполнения оператора
n=scanf("%lf%lf%lf", &x,&y,&z);
значение n будет от 0 (ничего не прочтено) до 3 (при успешном вводе).
Отдельные символы вводятся при помощи функции getch (). Причем простой ее вызов - getch(); - организует паузу, при которой система программирования приостановит выполнение программы и будет ждать нажатия любой клавиши. Так поступают в том случае, когда нужно просмотреть какие то результаты работы, при выводе их на экран монитора.
Если же использовать ее в правой части операции присваивания, например:
char c;
...
c = getch();
то символьная переменная с получит значение символа (кода) нажатой клавиши.
С началом работы консольной программы автоматически открываются стандартные потоки для ввода данных – stdin, который по умолчанию связан с клавиатурой, и вывод – stdout, связанный с экраном монитора.
|
|
Внимание. Ввод данных функциями gets (), getch () выполняется с использованием потока stdin. Если указанная функция не выполняет своих действий (проскакивает), перед ее использованием необходимо очистить поток (буфер) ввода с помощью функции
fflush (stdin);
Отметим, что не гарантируется одновременная работа функций ввода-вывода и потокового ввода-вывода; однако на практике они конфликтуют редко.