Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Рацеев С.М. Программирование на языке Си.pdf
Скачиваний:
366
Добавлен:
23.03.2016
Размер:
1.65 Mб
Скачать

2.ВВОД И ВЫВОД В СИ

2.1.Стандартный ввод-вывод

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

Стандартный вывод. Функция putchar() является простейшей функцией консольного ввода-вывода. Она выводит символ на экран:

int putchar( int c)

В качестве результата данная функция возвращает переданный в качестве параметра символ c, в случае же ошибки – EOF. Параметр данной функции может быть символьной константой, символьным литералом, символьной переменной, например

/*символьная константа */

/*символьный литерал*/

/*символьная переменная*/

#include <stdio.h>

#include <stdio.h>

#include <stdio.h>

#define LETTER 'A'

int main( )

int main( )

int main( )

{

{

{

putchar(‘A’);

char letter = ‘A’;

putchar(LETTER);

putchar(‘\n’);

putchar(letter);

return 0;

return 0;

return 0;

}

}

}

При этом под строковым литералом подразумевается символ, заключенный в одинарные апострофы.

Ниже приведены управляющие символы, некоторые из которых позволяют перемещать курсор по экрану:

Символ

Код

Описание

 

символа

 

\b

8

перемещение курсора на одну позицию влево

\t

9

горизонтальная табуляция

22

\n

10

перемещение курсора в начало следующей

 

 

строки

\v

11

вертикальная табуляция

\r

12

перемещение курсора в начало той же строки

 

 

без перехода на следующую

\f

13

новая страница

\”

34

двойная кавычка (“)

\’

39

одинарная кавычка (‘)

\?

63

вопросительный знак (?)

\\

92

обратная наклонная черта (\)

Функция puts() осуществляет вывод строки на экран: int puts(const char *s)

В качестве параметра данная функция может принимать строковую константу, строковый литерал, строковую переменную, например

/*строковая константа*/

/*строковый литерал*/

/*строковая переменная*/

#include <stdio.h>

#include <stdio.h>

#include <stdio.h>

#define MESSAGE "a message"

int main( )

int main( )

int main( )

{

{

{

puts("a message");

char message[] = "a message";

puts(MESSAGE);

return 0;

puts(message);

return 0;

}

return 0;

}

 

}

Заметим, что под строковым литералом подразумевается последовательность символов, заключенных в двойные кавычки.

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

Стандартный ввод. Функция gets() вводит строку в переменную s до тех пор, пока не встретит символ новой строки или индикатор конца файла. После этого массиву символов s добавляется ограничивающий символ ‘\0’:

23

char *gets(char *s)

Параметром данной функции является имя переменной. Например:

#include <stdio.h> int main( )

{

char s[10];

gets(s); /* ввод строки с клавиатуры */ puts(s); /* вывод строки на экран */ return 0;

}

Функция gets() будет рассматривать первые 9 символов, введенных с клавиатуры, как значение строковой переменной s, и один символ отводится для нулевого символа ‘\0’. Поэтому реально можно ввести на один символ меньше.

Функция gets(char *s) возвращает строку s. Например, в следующем примере происходит запрос ввести строку, после чего введенная строка выводится на экран вместе со значением ее длины, и так до тех пор, пока вместо ввода очередной строки не будет просто нажата клавиша ENTER.

#include <stdio.h> #include <string.h> int main( )

{

char s[10];

while (strlen(gets(s)) > 0) printf(“%s %d\n”, s, strlen(s));

return 0;

}

Функция getchar() вводит символ с клавиатуры: int getchar(void).

24

В качестве результата каждого своего вызова функция getchar() возвращает символ ввода или, если обнаружен конец файла, значе-

ние EOF.

#include <stdio.h> int main( )

{

char c;

c = getchar(); putchar(c); putchar('\n'); return 0;

}

В качестве примера приведем программу, которая запрашивает символ и выводит ASCII код введенного символа:

#include <stdio.h> int main( )

{

char c;

c = getchar();

printf("ASCII кодом символа %c является %d\n", c, c); return 0;

}

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

#include <stdio.h> int main( )

{

char c, s[10]; int i = 0;

25

while ((c = getchar()) != ‘\n’ && i < 9) s[i++] = c;

s[i] = ‘\0’; puts(s); return 0;

}

Но лучше вместо функции gets() использовать функцию fgets(), которая позволяет указать размер символьного массива, который требуется заполнить вводом символов с клавиатуры. Указание размера символьного массива данной функции дает возможность избежания ошибки выхода за его пределы, что не обеспечивается функцией gets(). Небольшим же недостатком функции fgets() является то обстоятельство, что она не удаляет завершающий символ конца строки ‘\n’, как это делает функция gets(). Ниже приведен пример использования функции fgets(). Более подробно о данной функции рассказано в главе "Работа с файлами".

#include <stdio.h> int main()

{

char s[10]; fgets(s, 10, stdin); printf("%s", s); return 0;

}

Возвращаясь к функции getchar(), заметим, что ее можно использовать также для приостановки действия программы:

int main( )

{

/* … программа */ getchar();

return 0;

}

26