double arrow

Консольные функции ввода информации


Функция 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);

Отметим, что не гарантируется одновременная работа функций ввода-вывода и потокового ввода-вывода; однако на практике они конфликтуют редко.







Сейчас читают про: