Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2-ОСНОВЫ ПРОГРАММИРОВАНИЯ.doc
Скачиваний:
87
Добавлен:
10.04.2015
Размер:
650.24 Кб
Скачать
      1. Функция форматированного ввода scanf( )

Буква f в имени этой функции также напоминает о том, что данная функция является форматированной. Она описана в заголовочном файле stdio.h.

Мы будем использовать эту функцию в наиболее простой форме:

scanf (“формат” , адрес аргумента);

При вводе числового значения аргументом функции scanf( ) является переменная или элемент массива соответствующего типа. Для получения адреса числовой переменной перед ее именем нужно поставить знак & (амперсанд), который в данном случае означает операцию взятия адреса числовой переменной.

При вводе одного символа аргументом функции scanf( ) является символьная переменная или элемент символьного массива. Для получения адреса символьной переменной перед ее именем нужно также поставить знак & (амперсанд) так как тип char является типом «целое».

При вводе строки символов аргументом функции scanf( ) является имя символьного массива. Перед именем символьного массива знак & не ставится, так как в языке Си это имя уже является адресом.

Функция scanf ( ) принимает с клавиатуры все символы до нажатия клавиши ENTER. Введенные символы преобразуются в соответствии с форматом. Полученное значение записывается в оперативную память компьютера по адресу соответствующей переменной или элемента мас-сива. Функция scanf ( ) использует тот же список форматов, что и функция printf ( ) (табл. 3). Если значение набрано неверно, но клавиша ENTER ещё не нажата, то это значение можно откорректировать.

При использовании функции scanf ( )необходимо учитывать особен-ности её работы. После нажатия клавиши ENTER вводимая строка поме-щается во внутренний буфер stdin. Для получения значения аргумента используется первая группа символов (до пробела или символа \n). Это значение отправляется по адресу аргумента, а оставшиеся в буфере симво-лы поступают в программу при последующих обращениях к функции scanf ().

ПРИМЕР 9:

Задание

Разберём работу следующего фрагмента программы, в котором используются два символьных массива t1 и t2.

Решение

printf(“\n Кто ваш любимый писатель?”);

scanf(“%s”, t1);

printf(“\n Ваше любимое произведение?”);

scanf(“%s”, t2);

/*1*/

/*2*/

/*3*/

/*4*/

Предположим, что в процессе выполнения программы после появления на экране слов

Кто ваш любимый писатель?

на клавиатуре был набран ответ:

Лев Николаевич Толстой

и нажата клавиша ENTER. В результате в массив t1 будут помещены только символы

Лев

Ввод с клавиатуры, предписываемый строкой /*4*/, выполняться не будет. Для получения названия литературного произведения будут использоваться данные, оставшиеся в буфере. В результате в массиве t2 будет записана информация

Николаевич

ПРИМЕР 10:

Задание

Рассмотрим работу следующего фрагмента диалоговой программы, в котором используются символьный массив name и числовая переменная age целого типа.

Решение

printf(“\n Здравствуйте! Как вас зовут?”);

scanf(“%s”,name);

printf(“\n Сколько вам лет?”);

scanf(“%d”,&age);

/*1*/

/*2*/

/*3*/

/*4*/

Предположим, что в процессе выполнения программы после появления на экране с новой строки слов

Здравствуйте! Как вас зовут?

на клавиатуре были набраны символы

Сидоров Пётр Иванович

и нажата клавиша ENTER. В результате в массив name будут помещена только фамилия

Сидоров

Несмотря на то, что требуется значение другого типа, ввод с клавиатуры значения переменной age, предписываемый строкой /*4*/ , выполняться не будет, так как в буфере остались данные от предыдущего ввода.

Из приведённых примеров следует, что перед вводом информации с помощью функции scanf( ) целесообразно предварительно очистить буфер ввода.

Эту задачу выполняет функция fflush(). Строку /*4*/ примера 2 следует записать в виде:

fflush(stdin); scanf(“%s”,t2);

/*4*/

а аналогичную строку примера 3 в виде:

fflush(stdin); scanf(“%d”,&age);

/*4*/

Обратите внимание на отсутствие знака & перед именами символьных массивов (пример 9) и его наличие перед именем числовой переменной (пример 10).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]