Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
111111111.docx
Скачиваний:
6
Добавлен:
17.04.2019
Размер:
131.57 Кб
Скачать

Вопрос 5

Консольные функции вывода данных на экран

Наряду с потоковым вводом-выводом, в консольных приложениях применяются и функции ввода-вывода языка Си. Их декларации приведены в заголовочных файлах stdio.h и conio.h .

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

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

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

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

В списке объектов вывода указываются выводимые на экран переменные, константы или выражения, разделенные запятыми. Список объектов вывода может отсутствовать.

Каждый из спецификаторов формата соответствует своему объекту из списка вывода, в порядке следования. Поэтому количество и порядок следования спецификаторов форматов должны совпадать с количеством и порядком следования выводимых объектов. Функция printf выполняет вывод данных в соответствии с указанными форматами. Весь остальной (кроме спецификаторов форматов) текст управляющей строки выводится на экран без изменений.

Имеется большое количество различных спецификаторов формата. Основные из них:

%d (%i) – десятичное целое число;

%f – вещественное число, запись с фиксированной точкой;

%е – вещественное число, экспоненциальная запись;

%g – вещественное число, запись с фиксированной точкой либо экспоненциальная запись, в зависимости от значения величины;

%o – восьмеричное число без знака;

%x – шестнадцатеричное целое число без знака (малые буквы a-f);

%X – шестнадцатеричное целое число без знака (большие буквы A-F);

%c – один символ;

%s – строка символов (массив char).

Для "длинных" типов чисел добавляется символ l : %ldlong (длинное целое), %lfdouble (вещественное число с удвоенной точностью). Для еще более длинных типов чисел вместо l добавляется L : %Ld - long long, %Lg - long double в соответствии с форматом %g.

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

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

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

Пример:

int number = 5; float but = 255; int cost = 11000;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Консольные функции ввода информации

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

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

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

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

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

Поэтому функцией scanf() по формату %s строка вводится только до первого пробела. Для ввода произвольной строки текста, содержащей пробелы, используется функция:

gets (ID символьного массива);

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

scanf("%d:%d:%d", &hour, &min, &sec);

позволяет вводить с клавиатуры время в обычном формате.

Функцию scanf() также можно записывать в виде:

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

При этом целая переменная получит значение, равное количеству успешно введенных объектов ввода. Например, после выполнения оператора

n=scanf("%lf%lf%lf", &x,&y,&z);

значение n будет от 0 (ничего не прочтено) до 3 (при успешном вводе).

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

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

char c;. . .

c = getch();

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

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

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

fflush(stdin);

Отметим, что не гарантируется одновременная работа функций ввода-вывода и потокового ввода-вывода; однако на практике они конфликтуют

Потоковый ввод-вывод

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

Для ввода-вывода в консольных приложениях в языке С++ используются два объекта класса iostream: cin (класс istream), cout (класс ostream) и две операции: >> и <<. Для их работы необходимо подключить заголовочный файл iostream.h.

Формат записи операций извлечения из потока >> (ввод с клавиатуры) и помещения в поток << (вывод на экран) следующий:

cout << выражение ;

cin >> ID(имя) переменной ;

Стандартный поток вывода cout по умолчанию связан со стандартным устройством вывода stdout (дисплей монитора), а ввода cin – со стандартным устройством ввода stdin, т.е. клавиатурой. Приведем пример:

#include<iostream.h>

void main (void)

{

int i, j, k;

cout << “ Hello! ” << endl; // «end line» – переход на новую строку

cout << “ Input i, j ”;

cin >> i >> j ;

k = i + j ;

cout << “ Sum i , j = “ << k << endl;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]