Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лб инф передел / C++ / Алиса / Информатика / ПерваяПрограммаС.doc
Скачиваний:
47
Добавлен:
15.04.2015
Размер:
3.17 Mб
Скачать

Глава 5

ВВОД В СИ/СИ++

Вводом называется процесс предоставления компьютеру информации, необходимой для работы программы. Информация вводится в переменные, это означает, что данные, которые пользователь вводит в ответ на соответствующую подсказку, определяются как значение переменной, хранящейся в памяти. Затем переменная используется в выполняемых программой операциях. Из рисунка 5.1 видно, что ввод информации может происходить из различных источников.

Ввод данных — это процесс, который определяет всю дальнейшую работу программы. Достоверность получаемых от программы результатов не может быть больше, чем достоверность вводимой в нее информации. Как говорится, чистый вход— чистый выход. Если введенные в программу данные были ошибочными, все полученные результаты тоже окажутся неверными.

В этой главе мы подробно рассмотрим ввод данных с клавиатуры. В главе 12 вы узнаете, как программа берет данные из дискового файла.

Рис. 5.1. Откуда бы ни поступали данные,компьютер хранит их в памяти как переменные

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

Замечания по Си++

Си++ может работать со всеми функциями ввода Си.

Данные вводятся только как значения переменных, но не констант. Константы всегда сохраняют присвоенные им начальные значения. Когда вы вводите в переменную некоторые данные, они помещаются в отведенную для этой переменной область памяти. Если переменной уже присвоено какое-то значение, новая информация заместит прежнюю, уничтожив ее (рис.5.2).

Рис. 5.2. При вводе данных прежнее значение переменной теряется

Функция gets()

Функция gets() вводит строку в переменную. Параметром функции является имя переменной. Рассмотрим такую программу:

main()

{

char name[15];

gets(name);

puts(name);

}

Функция gets() будет рассматривать первые 14 символов, введенные с клавиатуры, как значение строковой переменной с именем name. Вы помните, что Си отводит строковой переменной столько элементов памяти, сколько указано в максимальном значении при определении переменной, а так как один элемент необходим для нулевого символа (\0), реально можно ввести на один символ меньше. Если вы хотите ввести в переменную name строку, состоящую из 15 символов, то укажите в квадратных скобках максимальное значение 16:

char name[16];

На время работы функции gets() выполнение программы приостанавливается. Она ждет, пока пользователь что-то напечатает. Для того чтобы напечатанные данные стали значением переменной, после ввода информации надо нажать клавишу Enter. Как только это сделано, строка, введенная пользователем, присваивается переменной в качестве значения, а курсор переходит на следующую строку на экране. При нажатии Enter Си добавляет в строку нулевой символ.

Когда вы вводите символы при выполнении инструкции gets(), они отображаются на экране монитора (в режиме эха), при этом не используются никакие функции вывода, и символы на самом деле не будут введены в компьютер, пока не нажата клавиша Enter.

Рассмотрим более подробный пример:

main()

{

char name[25];

printf("Пожалуйста, введите Ваше имя: ");

gets(name);

printf("Подтвердите, Ваше имя: %s", name);

}

Когда программа будет выполняться, вы увидите на экране подсказку:

Пожалуйста, введите Ваше имя:

Возьмите себе за правило использовать функции printf() или puts() для вывода на экран подсказок, говорящих пользователю перед каждой процедурой ввода данных, что именно ему надо сейчас ввести. Как вы сами убедитесь, четкие подсказки очень важны для правильного ввода информации.

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

Пока вы печатаете имя, символы отображаются на экран в режиме эха. Если вы допустите ошибку, ее можно исправить до того, как нажата клавиша Enter, уничтожив неправильные символы клавишей Backspace и напечатав новые. В некоторых системах можно использовать клавишу Esc для того, чтобы удалить все введенные символы и начать процедуру заново.

После нажатия клавиши Enter Си присваивает введенные символы переменной name и вставляет нулевой символ в конце строки. Затем программа переходит к выполнению второй функции printf() и на экране появляется вторая надпись (предположим, что вас зовут Петр Иванов):

Пожалуйста, введите Ваше имя: Петр Иванов

Подтвердите, Ваше имя: Петр Иванов

Помните, символы, составляющие ваше имя, отображались на экране после первой подсказки только в режиме эха, они не были введены в программу до того, как вы нажали Enter. После второй подсказки имя появляется на экране в качестве значения переменной name в результате выполнения второй функции printf().

Таким образом, функция gets() прекрасно подходит для ввода в программу строк.

Соседние файлы в папке Информатика