Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Си_3.doc
Скачиваний:
3
Добавлен:
25.08.2019
Размер:
192 Кб
Скачать

Построчный ввод-вывод данных

Построчный ввод данных осуществляют функции gets, fgets, getpass.

Функция gets читает строку из стандартного потока stdin и помещает её по адресу символьной строки-параметра функции.

Прототип функции gets:

char *gets (char * string);

В строку включаются все символы до первого символа новой строки ‘\n’, не включая его. Строка-результат дополняется символом конца строки ‘\0’. Поэтому для строки надо выделить ОП на 1 байт больше, чем требуется для вводимых полезных символов.

Прототип функции fgets:

char *fgets (char * string, int n, FILE * stream);

где string – указатель на значение вводимой строки;

n – количество вводимых символов, увеличенное на 1;

stream – имя указателя входного потока.

Функция fgets читает строку из входного потока до наступления одного из событий:

  • конец строки ‘\n’, который включается в считанную строку;

  • достигнут конец файла;

  • прочитано (n –1) символов.

Результат помещается в строку string и дополняется символом конца строки ‘\0’. Для строки-результата ОП должна быть на 2 байта больше, чем требуется для вводимых символов строки: для символов ‘\n’ и ‘\0’.

Возвращаемые значения gets и fgets:

  • адрес строки string с результатом, если чтение прошло успешно;

  • NULL, чтение неуспешно: ошибка или достигнут конец файла.

Эту ситуацию можно распознать из анализа значения, возвращаемого функцией.

Пример Ввод строки с клавиатуры функцией gets в переменную a-массив символов

#include <stdio.h>

void main(void)

{ char a[50];

if (!gets(a))//Ввод неуспешен, если ввести только конец файла

printf(“\n Ошибка при вводе’a’\n”);

puts(a);

}

Пример Ввод строки из файла в переменную a-массив символов

#include <stdio.h>

FILE* f;

void main( )

{ char a[50];

f = fopen(“name_1”, “r”);

if (!fgets(a,12,f))//Ввод неуспешен, если ввести только конец файла

printf(“\n Ошибка при вводе’a’\n”);

puts(a);

}

Рассмотрим пример ввода строк до конца файла на основе анализа результата функции feof:

while( !feof(fid))

{fgets(str,50,fid);…

Так как в Си нет контроля длины строки при её размещении в ОП, превышение длины введённого значения над выделенной ОП может привести к искажению других данных в ОП, в том числе и самой ОС.

Функция getpass используется для ввода с клавиатуры пароля, то есть строки без эхопечати.

Прототип функции getpass:

char * getpass (char * zapros);

где zapros – указатель на символьную константу или символьная константа, содержащая приглашение к вводу пароля.

Возвращаемое значение getpass: указатель на строку с типом static из не более 8 символов с завершающим нулём. Это значение может быть присвоено переменной-указателю на данные типа char.

Пример Использование функции getpass

#include <stdio.h>

#include <conio.h>

#include <string.h>

void main(void)

{ static char *b;

b = getpass(“введите пароль:”)

// printf(“\n b = ‘%s’”, b); это – отладочный ввод

if (strcmp(b, “пароль”)) /*Сравнение двух строк;

истинно при несовпадении двух строк*/

printf (“Вы ошиблись…\n;”)

}