logo search
Подбельский Фомин_Программирование на языке СИ_

Ввод-вывод строк.

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

char * gets(char * s); /* Функция ввода */

int puts(char * s); /* Функция вывода */

Обе функции имеют только один аргумент - указатель s на массив символов. Если строка прочитана удачно, функция gets( ) возвращает адрес того массива s, в который производился ввод строки. Если произошла ошибка, то возвращается NULL.

Функция puts( ) в случае успешного завершения возвращает последний выведенный символ, который всегда является символом '\n'. Если произошла ошибка, то возвращается EOF.

Приведем простейший пример использования этих функций.

Напомним, что любая строка символов в языке Си должна заканчиваться нуль-символом '\0'. В последний элемент массива strl нуль-символ будет записан автоматически во время трансляции при инициализации массива. Для функции puts( ) наличие нуль-символа в конце строки является обязательным. В противном случае, т.е. при отсутствии в символьном массиве символа '\0', программа может завершиться аварийно, так как функция puts( ) в поисках нуль-символа будет перебирать всю доступную память байт за байтом, начиная в нашем примере с адреса strl. Об этом необходимо помнить, если в программе происходит формирование строки для вывода ее на экран дисплея. Функция gets( ) завершает свою работу при вводе символа '\n', который автоматически передается от клавиатуры в ЭВМ при нажатии на клавишу <Enter>. При этом сам символ '\n' во вводимую строку не записывается. Вместо него в строку помещается нуль-символ '\0'. Таким образом, функция gets( ) производит ввод "правильной" строки, а не просто последовательности символов.

Здесь следует обратить внимание на следующую особенность ввода данных с клавиатуры. Функция gets( ) начинает обработку информации от клавиатуры только после нажатия клавиши <Enter>. Таким образом, она "ожидает", пока не будет набрана нужная информация и нажата клавиша <Enter>. Только после этого начинается ввод данных в программу.