20:31 6. Функции и объекты ввода/вывода | |
Функции и объекты ввода/вывода В языке C++ нет встроенных средств ввода/вывода – он осуществляется с помощью функций, типов и объектов, содержащихся в стандартных библиотеках. Используется два способа: функции, унаследованные из языка С, и объекты C++. Подчеркивая важность функций и объектов ввода/вывода их иногда называют операторами, хотя, по сути, это не так. Основные функции ввода/вывода в стиле С: scanf (const char* format, [адрес переменной] , [адрес переменной]... ) // ввод printf(const char* format, [имя переменной] , [имя переменной]... ) // вывод Они выполняют форматированный ввод и вывод произвольного количества величин в соответствии со строкой формата format. printf () является функцией стандартной библиотеки с переменным числом аргументов. Она всегда имеет, по крайней мере, один аргумент – строку формата, чаще всего строковый литерал. Строка может содержать спецификаторы преобразования. Функция сканирует строку и передает ее символы на стандартный вывод программы, по умолчанию консоль, пока не встретит спецификатор преобразования. В этом случае printf () ищет дополнительный аргумент (используя имя переменной из списка), который форматируется и выводится в соответствии со спецификацией ( спецификация в строке вывода заменяется на значение переменной). Таким образом, вызов printf () должен содержать столько дополнительных аргументов, сколько спецификаторов преобразования имеется в строке формата. Спецификатор преобразования Синтаксис спецификатора преобразования имеет такой вид: %[флаги] [поле][.точность][размер]символ типа Как видите, обязательными элементами спецификатора являются только начальный знак процента (по знаку процента легко контролировать количество переменных) и символ, задающий тип преобразования. Таблица I.5 Приложения I перечисляет возможные варианты различных элементов спецификации. Флаги задают "стиль” представления чисел на выводе, поле и точность определяют характеристики поля, отведенного под вывод аргумента, размер уточняет тип аргумента, символ типа задает собственно тип преобразования. В строке формата можно использовать escape-последовательности. В приведенном ниже примере используется последовательность \n, которая обеспечивает при выводе перевод строки. Следующий пример показывает возможности форматирования функции printf (). Если суть оператора и спецификации не понятна, выполните следующую далее программу в C++Builder. Примечание: следует напомнить, что на рис. 1.2 была базовая программа. Здесь и далее будет приведен текст, который нужно поместить между линиями из звездочек в базовую программу. /* **Демонстрация форматирования вывода на консоль **функцией printf(). */ double p = 27182.81828; int j = 255; /* Вывести 4 цифры; вывести обязательный знак числа */ printf(RUS(" Позиции: 1234567891234123456789\n")); printf(RUS("Тест целого формата: %13.4d %+8d\n"), j, j); /* Вывести по левому краю со знаком; заполнить нулями свободные позиции: */ printf(RUS(" Позиции: 1234567891234512345678\n")); printf(RUS("Еще один тест целых форматов: %-+13d %08d\n"), j, j); /* Самостоятельно определить формат вывода*/ printf(RUS(" Позиции: 1234567891234512345678\n")); printf(RUS("Тест o и h форматов: %#13o %#8.7x\n"), j, j); printf(RUS(" Позиции: 1234567891234512345678\n")); printf(RUS("Тест формата e и f: %13.7e %8.2f\n"), p, p); Обязательно, выполните эту программу в C++Builder! В языке С для ввода имеется "зеркальный двойник” printf() – функция scanf (). Функция читает данные со стандартного ввода, по умолчанию – клавиатуры. Она так же, как и printf () , принимает строку формата с несколькими спецификаторами преобразования и несколько дополнительных параметров, которые должны быть адресами переменных, куда будут записаны введенные значения. Примером вызова scanf () может служить следующий фрагмент кода: int age; printf("Enter your age: "); // Запросить ввод возраста пользователя. scanf ("%d", &age); // Прочитать введенное число. Знак & означает операцию получения адреса. Для работы с этими функциями в программу необходимо включить заголовочный файл stdio.h. Основные объекты ввода/вывода в стиле С++: cin>>[имя переменной] >> [имя переменной]... //ввод cout<<[имя переменной] << [имя переменной]... //вывод Программа с использованием для ввода/вывода библиотеки классов C++ выглядит так: int i; cout << RUS("Введите целое число\n"); cin >> i; cout<<RUS("Вы ввели число ")<<i; cout<<RUS(", спасибо!"); Примечание. К сожелению, следует избегать двух функций RUS в одной строке с объектом cout. Это приводит к неправильному выводу. Поэтому фраза ", спасибо” выведена отдельным объектом cout. Заголовочный файл <iostream.h> содержит описание набора классов для управления вводом/выводом. В нем определены стандартные объекты-потоки cin для ввода с клавиатуры и cout для вывода на экран, а также операции помещения в поток << и чтения из потока >>. Для вывода информации в стандартный поток используется формат cout << выражение ; где выражение может быть представлено переменной или некоторым смысловым выражением: cout << Z ; cout <<RUS("Сумма ="); cout << 7+3; Последовательно можно выводить несколько выражений: cout << выражение 1 <<выражение 2; или cout << выражение 1 << выражение 2 << выражение 3 << выражение 4; При выводе можно использовать escape-последовательности: cout << RUS("Введите целое число\n"); cout << z <<" \n"; Для ввода данных с клавиатуры используется формат записи: cin >> переменная ; или cin >> переменная 1>> переменная2; При этом тип вводимого значения и тип переменной в программе, которой передается значение, должны совпадать. Можно вводить несколько значений для разных переменных. Переменные отделяются пробелом или нажатием клавиши Enter. Если введенных значений больше, чем ожидается в программе, часть вводимых данных останется во входном буфере. В случае если вводится строка символов, ввод продолжается до первого символа пробела или нажатия клавиши Enter. Если при следующем коде char String[80]; cin>> String; будет введена строка "Да здравствует С++", то переменная String примет значение "Да". Остальная часть строки останется в буфере до тех пор, пока в программе не встретится следующий оператор ввода. Для работы с объектами cin и cout в программу необходимо включить заголовочный файл iostream.h. В дальнейшем изложении будут использоваться оба способа ввода/вывода, но в одной программе смешивать их не рекомендуется. | |
|
Всего комментариев: 0 | |