Функции вывода данных на дисплей

В языке Си нет встроенных средств ввода/вывода данных. Ввод/вывод информации осуществляется с помощью библиотечных функций и объектов.

Декларации функций ввода/вывода, как уже упоминалось, приведены в заголовочном файле stdio.h.

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

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

printf( управляющая строка , список объектов вывода);

В управляющей строке, заключенной в кавычки, записывают: поясняющий текст, который выводится на экран без изменения (комментарии), список модификаторов форматов, указывающих компилятору способ вывода объектов (признак модификатора формата – символ %) и специальные символы, управляющие выводом (признак – символ \).

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

Количество и порядок следования форматов должен совпадать с количеством и порядком следования выводимых на экран объектов.

Функция printf выполняет вывод данных в соответствии с указанными форматами, поэтому формат может использоваться и для преобразования типов выводимых объектов.

Если признака модификации (%) нет, то вся информация выводится как комментарии.

Основные модификаторы формата:

%d (%i) – десятичное целое число;
%c – один символ;
%s – строка символов;
%f – число с плавающей точкой, десятичная запись;
– число с плавающей точкой, экспоненциальная запись;
%g – используется вместо f, e для исключения незначащих нулей;
%o – восьмеричное число без знака;
%x – шестнадцатеричное число без знака.

Для чисел long добавляется символ l, например, %ld – длинное целое, %lf – число вещественное с удвоенной точностью – double.

Если нужно напечатать сам символ %, то его нужно указать 2 раза:

printf ("Только %d%% предприятий не работало. \n",5);

Получим: Только 5% предприятий не работало.

Управляют выводом специальные последовательности символов: \n – новая строка; \t – горизонтальная табуляция; \b – шаг назад; \r – возврат каретки; \v – вертикальная табуляция; \\ – обратная косая; \' – апостроф; \" – кавычки; \0 – нулевой символ (пусто).

Пример:

#define PI 3.14159

. . .

int number = 5;

float bat = 255;

int cost = 11000;

. . .

printf(" %d студентов съели %f бутербродов. \n", number, but);

printf(" Значение числа pi равно %f. \n", pi);

printf(" Стоимость этой вещи %d %s. \n", cost, "Руб.");

. . .

В модификаторах формата функции printf после символа % можно указывать число, задающее минимальную ширину поля вывода, например, %5d – для целых, %4.2f – для вещественных – две цифры после запятой для поля шириной 4 символа. Если указанных позиций для вывода целой части числа не хватает, то происходит автоматическое расширение.

Если после «%» указан знак «минус», то выводимое значение будет печататься с левой позиции поля вывода, заданной ширины, например: % – 10d.

Использование функции printf для преобразования данных:

1) printf("%d", 336.65); получим: 336;

2) printf("%o", 336); получим: 520, т.е. 5*8**2+2*8+0*1 = 336;

3) printf("%x", 336); получим: 150 (шестнадцатеричное).

Можно использовать функцию printf для нахождения кода ASCII некоторого символа:

printf (" %c – %d\n", 'a', 'a');

получим десятичный код ASCII символа а: a – 65 .

Функция puts(ID строки); выводит на экран дисплея строку символов, автоматически добавляя к ней символ перехода на начало новой строки (\n).

Аналогом такой функции будет: printf(“%s \n”, ID строки);

Функция putchar() выдает на экран дисплея один символ без добавления символа ‘\n’.

Функции ввода информации

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

scanf (управляющая строка , список адресов объектов ввода);

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

Список объектов ввода представляет собой адреса переменных, разделенные запятыми, т.е. для ввода значения переменной перед ее идентификатором указывается символ &, обозначающий операцию «взять адрес».

Если нужно ввести значение строковой переменной, то использовать символ & не нужно, т.к. строка – это массив символов, а ID массива является адресом его первого элемента. Например:

int course;

double grant;

char name[20];

printf (" Укажите курс, стипендию, имя \n ");

scanf ("%d %lf %s", &course, &grant, name);

Вводить данные с клавиатуры можно как в одной строке через пробелы, так и в форме разных строк, нажимая после ввода текущего объекта клавишу Enter.

Функция scanf() использует практически тот же набор модификаторов форматов, что и printf(); отличия от функции вывода следующие: отсутствует формат %g, форматы %e,%f – эквивалентны. Для ввода коротких целых чисел введен модификатор формата %h.

Внимание. Функцией scanf() по формату %s строка вводится только до первого пробела.

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

gets (ID строковой переменной);

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

Если же использовать ее в правой части операции присваивания, например:

char c;

. . .

c = getch();

то символьная переменная с получит значение кода нажатой клавиши.

С началом работы любой программы автоматически открываются стандартные потоки для ввода (stdin) и вывода данных (stdout), которые по умолчанию связаны с клавиатурой и экраном монитора соответственно.

Внимание. Ввод данных функциями gets(), getch() выполняется с использованием потока stdin. Если указанная функция не выполняет своих действий (проскакивает), перед использованием необходимо очистить поток (буфер) ввода с помощью функции

fflush(stdin);

__________________________________________________________________

В языке С++ существует наиболее простая с точки зрения использования возможность ввода-вывода - потоковый ввод-вывод, основы которого рассмотрены в разд. 16.1, 16.2.

__________________________________________________________________

Наши рекомендации