Функции вывода данных на дисплей
В языке Си нет встроенных средств ввода/вывода данных. Ввод/вывод информации осуществляется с помощью библиотечных функций и объектов.
Декларации функций ввода/вывода, как уже упоминалось, приведены в заголовочном файле 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.
__________________________________________________________________