Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_по_пяву_4.doc
Скачиваний:
101
Добавлен:
15.03.2015
Размер:
1.29 Mб
Скачать
      1. Использование функции fgets()

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

#include<stdio.h>

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

Рассматриваемая функция имеет два дополнительных параметра, которые отсутствуют у функции gets(). Первый из дополнительных параметров (intn) служит для ограничения количества символов, которые могут быть прочитаны в массив str из буфера клавиатуры. Второй дополнительный параметр (FILE stream) при использовании функции fgets() определяет файл, с которым должна работать эта функция. Для консольного ввода достаточно в ее вызове в качестве параметра stream взять имя стандартного потока, предназначенного для работы с клавиатурой (stdin).

Функция fgets() в форме, предназначенной для ввода с клавиатуры, позволяет записать в массив, на который указывает указатель str, не более n – 1 символа. Ввод прекращается, как только встретится символ новой строки (который записывается в массив) или символ конца файла. За последним введенным символом добавляется нуль-символ. В случае успешного завершения функция вернет указатель строку str. Если прочитан конец файла, а ни один символ не был введен, то содержимое массива оказывается неизменным, а функция вернет значение NULL. Если во время ввода имела место ошибка, то функция вернет значение NULL, а содержимое массиваstrоказывается неопределенным. Приведем пример.

#include<stdio.h> #include<string.h> #define MAXSIZE 81 intmain(void) {charbuf[MAXSIZE];char* s = NULL; fgets(buf, sizeof(buf), stdin); s = strchr(buf, '\n');/* Ищем символ ‘\n’ в прочитанной строке */if(s != NULL) *s = '\0'; /* Запись символа ‘\0’вместо символа ‘\n’ */return0;

}

С целью приблизить работу функции fgets() к работе функции gets(), которую она призвана заменить, в рассматриваемом примере добавлен программный код, удаляющий из массива, используемого для ввода строки (buf), символ новой строки (\n). Для этой цели используется функция strchr() и инструкция if.

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

Для ввода строк с клавиатуры можно воспользоваться следующими библиотечными функциями:

  • printf(),

  • puts(),

  • fputs().

Начнем рассмотрение с функции printf().

      1. Функция printf()

Строки могут выводиться с помощью библиотечной функции printf(). Для вывода строкового литерала достаточно поместить его текст в форматной строке вызова рассматриваемой функции. Пусть необходимо вывести стандартное приветствие. Это можно выполнить с помощью следующего вызова функции printf():

printf(“Hello,world”);

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

printf(“%5s%10s%10s”, “НОМЕР”, “АРГУМЕНТ”, “ФУНКЦИЯ”);

      1. Функция puts()

Объявление функции puts() имеет следующий вид

#include<stdio.h> int puts(const char* str);

Функция puts() выводит на экран дисплея строку, на которую установлен указатель str. Нуль – символ этой строки преобразуется в символ новой строки, который выводится на экран. Последнее приводит к тому, что после вывода строки str курсор перейдет на начало новой строки экрана.

При успешном выполнении функция puts() возвращает неотрицательное число, а в случае сбоя – значение EOF.

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

Приведем пример применения функции puts().

/* Демонстрация вывода строк с применением функции puts()*/

/* Файл puts.c*/

#include<stdio.h>intmain(void) {char*msg1 = “Не”;char*msg2 = “применяйте”;char*msg3 = “функцию”;char*msg4 = “gets()”;char*msg5 = “в коммерческих”;char*msg6 = “приложениях!!!”;puts(msg1);puts(msg2);puts(msg3);puts(msg4);puts(msg5);puts(msg6);return0; }

Результат выполнения программы будет иметь следующий вид: Не применяйте функцию gets()

в коммерческих приложениях!!!