Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C++ / Справочная информация / Ввод-вывод данных на консоль.doc
Скачиваний:
18
Добавлен:
13.05.2017
Размер:
139.78 Кб
Скачать
    1. Ввод-вывод данных на консоль. Библиотека stdio

      1. Стандартные потоки библиотеки stdio

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

Функции ввода-вывода размещены в нескольких библиотеках, наиболее популярные из которых stdio, conio, iostream.

Рассмотрим некоторые библиотечные функции библиотек stdio и conio.

После подключения библиотеки stdio с помощью директивы #include в начале работы программы, автоматически открываются три заранее определенных потока:

  • stdin - входной поток данных

  • stdout - выходной поток данных

  • stderr - поток ошибок

По умолчанию эти потоки связаны с консолью:

  • stdin - с клавиатурой

  • stdout - с терминалом

Следует отметить, что потоки можно перенаправить и на другие устройства, например в файл.

      1. Чтение и запись символов

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

Функции getchar() и getch() возвращают целое число, в младшем байте которого содержится код символа, соответствующего нажатой клавише (старший байт содержит нулевое значение).

Если при вводе возникает ошибка, функции возвращают константу EOF(EOF равна -1).

Формат функций ввода выгладит так:

int getchar (void)

int getch (void)

Безразлично, к какому типу (char или int) вы отнесете вводимый символ, что обусловлено двойственностью символьных данных в языке С (о двойственности смотрите ниже по тексту). Обратите внимание на то, что для сохранения введенной информации необходима операция присваивания, так как функции getch() и getchar() рассматривается программой как значение введенной переменной.

Однако на этом сходство обеих функций кончается, далее остановимся на их отличиях. Прототип функции getchar() находится в библиотеке stdio.h. Функция getchar() вводит символ из потока stdin, который имеет буфер на одну строку, поэтому она ничего не возвращает до тех пор, пока вы не нажмете клавишу ENTER, кроме того, функция getchar() осуществляет эхопечать.

Прототип функции getch() находится в библиотеке conio.h. Функция getch() вводит символ с консоли без буферизации и эхопечати. Это означает, что символ доступен в программе сразу же после того, как он введен с клавиатуры.

Пример:

#include <stdio.h> #include <conio.h>

void main()

{ char simbol1;

char simbol2;

simbol1 = getchar();

simbol2 = getch();

}

Для того, чтобы записать информацию в перемекнную simbol1, после ввода первого символа необходимо нажать ENTER, второй значащий символ запишется в переменную simbol2 сразу после его ввода с клавиатуры. Причем первый введенный символ мы увидим на экране, а второй нет. Чтобы проверить правильность ввода можно использовать инструкцию:

printf ("\nsim1=%c sim2=%c\n",simbol1,simbol2);

Следующий пример показывает посимвольную работу с текстом.

Пример. Ввести текст с клавиатуры, признаком конца ввода считать точку, подсчитать количество введенных символов.

#include <stdio.h> void main() { char z[100]; int i; printf(“Напишите предложение с точкой в конце:\n”) for (i=0; z[i] != '. '; i++) z[i]=getchar(); printf(«Количество символов=%d»,i); }

Следует обратить внимание на то, что при работе с текстом, используя getchar(), мы не получаем строку символов, так как отсутствует признак конца строки '\0'. Для того, чтобы не нарушать стандартов языка, следует добавить символ '\0' после окончания ввода текстовой информации.

void main() { char z[100]; int i; printf(“Напишите предложение с точкой в конце:\n”) for (i=0; z[i] != '. '; i++) z[i]=getchar(); printf(«Количество символов (без признака «конец строки») =%d»,i); z[i] = '\0';

}

Итак, добавление '\0' к массиву z[] превращает последовательность символов в строку.

Остановимся на двойственности символьных данных. Функции ввода-вывода для символьных данных были сконструированы таким образом, чтобы они могли работать и с целочисленным типом данных. Компилятор самостоятельно преобразует данные типа int в буквы.

Пример: Двойственность символьных данных

void main()

{

int letter;

letter='G';

putchar(letter);

}

Несмотря на то, что переменная letter определена как целочисленная, ей может быть присвоен символ. Программа при этом будет компилироваться, и выполняться без ошибок. Право выбора, использовать ли переменные типа char или int, остается за вами.

Рассмотрим функцию вывода символа на консоль - putchar(). Несмотря на то, что эта функция наряду с символами может получать и целочисленный аргумент, ей можно передавать только символьные значения. Иначе говоря, целочисленные значения трактуются как коды символов, и, следовательно, на экран выводится только младший байт аргумента.

Функция putchar() возвращает либо код символа, либо константу EOF, если произошла ошибка.

Формат функции putchar() выглядит так:

int putchar (int c)

Параметром функции может являться:

  • символьный литерал;

  • символьная константа;

  • символьная переменная.

Пример: Составить слово из отдельных символов и вывести его на экран.

#define sim2 'Е'

void main()

{ char sim3;

sim3='С';

printf ("Составим слово ЛЕС из отдельных символов:")

putchar('Л'); \\ символьный литерал;

putchar(sim2); \\ символьная константа;

putchar(sim3); \\ символьная переменная

}

Обратите внимание на то, что при работе с символьными данными (литералами или константами) их следует заключать в одинарные кавычки.

Соседние файлы в папке Справочная информация