Программирование на языке С++. Лекция 2. Начальные сведения о вводе - выводе презентация

Содержание

Слайд 2

Начальные сведения о вводе - выводе

Ввод и вывод как в С, так

и в С++ не относятся непосредственно языку. Они обеспечиваются стандартными библиотеками. Для С++ такая библиотека называется iostream. Сейчас мы разберем ее на том уровне, который достаточен для начала работы, а в свое время вернемся к ней для более детального изучения и тогда же разберем средства ввода-вывода, которые включены в стандарт языка С и тоже могут быть доступны в программах на С++.
Ввод, идущий с клавиатуры пользователя, называется стандартным входным потоком или стандартным вводом. Он связывается с предопределенным в iostream.h потоком cin. Вывод, направляемый на экран пользователя, называется стандартным выходным потоком или стандартным выводом. Он связывается с предопределенным в iostream.h потоком cout.

Слайд 3

Начальные сведения о вводе - выводе

Операция вывода << направляет значение в стандартный

выходной поток.
  cout << index;
  Для перехода на новую строку существуют два способа. Первый - это использовать определенный в iostream.h манипулятор endl. Манипулятор можно выводить в поток и при этом он меняет параметры вывода. Здесь endl вызовет переход на новую строку
cout << endl;
Второй способ - это явно вывести в поток символ новой строки. В С++ он записывается двумя символами : '\n'.
cout << '\n';
Одиночные кавычки ограничивают символ. Такой символ может быть внутри строки символов, например оператор
cout << "Программа на С++\n";
вызовет переход на новую строку после вывода данного сообщения.
В одном операторе вывода можно соединять несколько операций. Например :
cout << "Значение index равно : " << index << endl;
Вывод осуществляется по порядку, считая слева направо.

Слайд 4

Начальные сведения о вводе - выводе

Аналогично операция ввода >> читает значение из

стандартного входного потока, например
cin >> index;
Такие операции тоже можно соединять в одном операторе. Например,
если в программе встретится следующий оператор :
cin >> i1 >> i2;
то программа будет ждать ввода с клавиатуры двух величин и первую из них поместит в переменную i1, а вторую - в переменную i2. Эти две вводимых величины можно разделять пробелом или табуляцией, а можно каждую из них вводить с новой строки - операция ввода сработает правильно.

Слайд 5

Начальные сведения о вводе - выводе

Если программист забудет включить в программу файл

iostream.h, то о каждом появлении в программе cin или cout транслятор будет сообщать как об ошибке, поскольку cin и cout описаны в iostream.h.
Третий предопределенный поток из iostream.h называется cerr и является стандартным потоком сообщений об ошибках. Он тоже связан с экраном пользователя и нужен, чтобы сообщать пользователю об особых ситуациях и ошибках при выполнении программы.
Например
cerr << "Ошибка чтения диска" << endl;
Для облегчения понимания операций << и >> можно представлять их как воронки, через которые информация из программы (например, из переменной
i1) выводится на экран (cout)
cout << i1;
или с клавиатуры (cin) попадает в программу (например в переменную i2)
cin >> i2;

Слайд 6

Элементарный Ввод/Вывод информации

В C++ отсутствуют специальные операторы ввода/вывода. Для организации ввода в

языке С используется библиотечные функции. Библиотеки BORLAND C++ в настоящее время содержат: stdio.h -ANSI C(turbo c); stream.h - C++; iosistem.h - C++. Каж¬дая из этих библиотек содержат значительное число функций. Рассмотрим простейшие.
Язык С поддерживает форматированный и неформатированный консольный ввод / вывод информации.

Слайд 7

Вывод информации на экран дисплея

Функции неформатного вывода в stdio имеют описание
int_cdecl putchar(const

int_c);
int_cdecl puts(const char*_s);
Функция putchar() - предназначена для вывода единичного символа в поток stdout. Аргументом функции может быть: символьный литерал; символьная переменная или символьная константа.
Функция puts() копирует строку символов с нулевым окончанием в стандартный выходной поток stdout, причём добавляет в конец символ перехода на новую строку. При успешном завершении функция возвращает ненулевое значение, а в противном случае EOF.
Аргументом функции может быть: строковый литерал; строковая переменная или константа. Примеры:
#define G "хорошо"
char g[ ]="хорошо"
puts("данная информация отобразится на экране дисплея");
puts('f');- отобразится символьный литерал- f
puts(g);-отобразится символьная переменная- слово "хорошо"
puts(G);- отобразится символьная константа- слово "хорошо"

Слайд 8

Простейший неформатный ввод данных

Функции неформатного ввода в stdio имеют описание
int_cdecl qetchar(void);
int_cdecl qets(char*_s);
где

для ввода символа используется qetchar() без аргумента.
Функция gets() читает строку символов, оканчивающуюся символом перевода строки в переменную *s из стандартного входного потока stdin. Данная символьная строка оканчивается символом перехода на новую строку, которая при записи в *s заменяется на нулевое окончание ‘\0’.
Функция qets(string) - аналогична scanf(" %s",string), но в отличие от нее передает все символы до '\n’. Пример:
#include
int main(void)
{char string[80];
printf("введите строку");
gets(string);
printf("Была введена строка: %s\n", string);
return 0;
}

Слайд 9

Форматированный ввод/ вывод

Форматированный ввод/ вывод может быть выполнен благодаря использованию 2-х функций:

scanf и printf, соответственно. В заголовочном файле stdio.h эти функции описаны как
int_cdecl printf(const char *__format,...);
int_cdecl scanf(const char *__format,...);
Запишем эти функции в следующем виде:
printf(упр.текст.(форматная)строка[,список аргументов]);
scanf(упр.текст.(форматная) строка[,список аргументов]);
Управляющая строка символов задает способ преобразования данных и состоит из произ¬вольной последовательности символов, в которой знак "%xxx" заменяется символами выводи¬мой информации. Символы после %xxx до первого разделителя рассматриваются как специфи¬кация преобразования значения выводимой переменной из списка аргументов. Спецификация преобразования задается в виде последовательности:
%[флаг][ширина][.точность][f/n/h/l]<тип>

Слайд 10

Форматированный ввод/ вывод


[флаг]

Слайд 11

Форматированный ввод/ вывод


[ширина]- воздействует только на вывод

Слайд 12

Форматированный ввод/ вывод


[.точность]- воздействует только на вывод

Слайд 13

Форматированный ввод/ вывод


--->[ F | N | h | l ] -модификатор

Слайд 14

Форматированный ввод/ вывод


Слайд 15

Форматированный ввод/ вывод

Вывод строк puts(string) - аналогично printf(“%s\n”,string).
Необходимо отметить, что функция scanf прекращает

работу, если:
- закончилась управляющая последовательность (форматная строка).
- очередной элемент ввода не удовлетворяет текущей спецификации преобразования или не совпадает с символом образца.
- достигнут конец файла ввода.

Примеры:
printf ("Печатается данный текст");
курсор остается на этой же строке после символа «T».
printf ("печатается данный текст \n ");//курсор переходит на следующую строку в первую позицию.

Для 1,2 случая функция возвращает число введенных переменных (т.е. в ячейке scanf число введенных переменных). Для 3 случая функция возвращает значение EOF. Следует заметить, что функция scanf по формату S вводит символы вводимого потока до первого разделителя, поэтому часто приходится очищать буфер stdin с помощью функции fflush(stdin).

Слайд 16

Форматированный ввод/ вывод (примеры)

Слайд 17

Простейший ввод /вывод С++

Рассмотренные выше функции ввода вывода относятся к простейшим и реализованы

в ранних версиях языка С++.
Однако эти функции используются и в последних версиях языка, поэтому возникла необходимость их приведения.
В последних версиях операции ввода /вывода реализованы на основе использования методов объектно-ориентированного программирования и поэтому будет приведено их краткое их описание, а подробное их рассмотрение будет произведено в последующих главах.
При рассмотрении вопросов связанных с вводом выводом информации пользуются понятием поток. Под потоком понимается абстрактное понятие, относящееся к любому переносу данных от источника к приемнику данных.
Базовые операции ввода /вывода последних версий поддерживаются тремя классами:
istream- ввод; ostream- вывода; iostream- ввода /вывода. Использование базовых функций требует подключения заголовочного файла - где приведены описания перечисленных классов.

Слайд 18

Простейший ввод /вывод С++

В качестве начальных сведений необходимо знать, что пользователю доступны четыре

объекта: cin - объект класса istream , обеспечивающий ввод; cout- объект класса ostream , обеспечивающий вывод; cerr- объект класса ostream, выполняющий не буферизованный вывод в стандартный поток ошибок -stderr; clog- объект класса ostream, выполняющий буферизованный вывод в стандартный поток ошибок - stderr.
Библиотека iostream.h перегружает два оператора поразрядного сдвига: << - поместить в выходной поток; >> - получить из входного потока.
Операция потокового вывода “<<”- в качестве операнда слева служит объект типа ostream (cout), а правый операнд может иметь любой встроенный тип (char, short, int, long, char* (строка), float, double, long double, void*) или любой переопределённый из встроенных типов тип. Операция “<<” обладает ассоциативностью слева и возвращает ссылку на объект ostream, что позволяет организовать каскадный вывод операндов.

Например:
int d=99;
float r=27.7;
cout<<”переменная d=”<позволит отобразить на экране дисплея переменную d=99,r=27.7
cout<<&d;// выводится адрес переменной d в шестнадцатеричном формате

Слайд 19

Простейший ввод /вывод С++

Операция потокового ввода “>>”- в качестве операнда слева служит объект

типа istream (cin), а правый операнд может иметь любой встроенный тип (char, short, int, long, char* (строка), float, double, long double, void*) или любой переопределённый из встроенных типов тип. Операция “>>” обладает ассоциативностью слева и возвращает ссылку на объект istream, что позволяет организовать каскадный ввод операндов.
Форматирование ввода и вывода определяется различными флагами состояний формата, перечисленными в классе ios. Эти состояния определяются битами числа типа long int следующим образом:

Слайд 20

Простейший ввод /вывод С++

// флаги формата
public:
enum {
skipws = 0x0001, // пропуск

пробельного символа на вводе
left = 0x0002, // вывод с левым выравниванием
right = 0x0004, // вывод с правым выравниванием
internal = 0x0008, // заполнитель после знака или указателя системы счисления
dec = 0x0010, // десятичное преобразование
oct = 0x0020, // восьмеричное преобразование
hex = 0x0040, // шестнадцатеричное преобразование
showbase = 0x0080, // показать на выходе указатель системы счисления
showpoint = 0x0100, // показать позицию десятичной точки (на выходе)
uppercase = 0x0200,// шестнадцатеричный вывод значений буквами верхнего регистра
showpos = 0x0400, // добавляет " + " к положительным целым числам
scientific = 0x0800,// использовать запись чисел с плавающей
точкой с выводом экспоненты Е например, 12345E2
fixed = 0x1000, // использовать запись чисел с плавающей точкой типа 123.45
unitbuf = 0x2000, // стирание всех потоков после вставки
stdio = 0x4000, // стирание stdout и stderr после вставки
boolalpha = 0x8000// вставка/извлечение bools как текстовый или числовой

Слайд 21

Простейший ввод /вывод С++

Эти флаги читаются и устанавливаются функциями элементами flags, setf

и unsetf (их описание приводится ниже).
По умолчанию операция “>>” опускает пробельные символы, и затем считывает символы, соответствующие типу вводимого объекта. Пропуск пробельных символов управляется флагом ios::skipws в перечислимой переменной состояния. Флаг skipws обычно ус¬танавливает пропуск пробельных символов. Очистка этого флага (например, при помощи setf) выключает пропуск пробельных символов.
Например:
cout<<’’введите переменные d,r’’;
cin>>d>>r;
В результате выполнения операции вывода на экране дисплея будет отображено
введите переменные d,r.
После чего необходимо ввести переменные d и r, разделяя их произвольным количеством пробелов.

Слайд 22

Использование манипуляторов при вводе /выводе данных

Форматированный вывод в С++ обеспечивается путём изменения

переменных форматирования при использовании специальных операторов (функций), называемых манипуляторами.

Слайд 23

Использование манипуляторов при вводе /выводе данных

Манипуляторы воспринимают в качестве аргументов ссылку на

поток и возвращают ссылку на тот же поток. Поэтому манипуляторы могут объединяться в цепочку занесения в поток (или извлечений из потока). Например:
#include
//требуется для параметризованных манипуляторов
#include
int main(void) {
int i = 1122, j = 3344, k = 55;
cout << setw(4) << i << setw(6) << j<cout << "\n";
cout << setw(6) << i << setw(6) << j << setw(6) << k;
cin>>i; return(0);
}
на экране дисплея будет отображена информация:
1122 334455
1122 3344 55

Слайд 24

Использование манипуляторов при вводе /выводе данных

Манипулятор setw представляет собой параметризованный манипулятор, объявление которого

находится в iomanip.h. Прочие параметризованные манипуляторы, работают аналогичным образом.
Поскольку манипуляторы объединяются в цепочку занесения в поток то для некоторых задач целесообразно писать свои собственные манипуляторы, без параметров. Например, ниже приведена функция префиксирования к выводимой информации знака доллара:
#include
// табулировать и префиксировать вывод знаком доллара
ostream& money (ostream& output) {
return output << "\t$";
}
int main(void) {
int rashod= 135, prixod = 231;
cout<<"rashod="<
Имя файла: Программирование-на-языке-С++.-Лекция-2.-Начальные-сведения-о-вводе---выводе.pptx
Количество просмотров: 72
Количество скачиваний: 0