Std::cin.get(); // Предотвращение закрытия окна консоли




return 0;

}

 

Для вывода строк, состоящих из двухбайтных символов, предназначены объекты wcout, wcerr и wclog, также объявленные в файле iostream. Объект wcout предназначен для вывода обычных сообщений, а объекты wcerr и wclog для вывода сообщений об ошибках. Например:

 

std::wcout << L"String";

 

Так как данные перед выводом могут помещаться в буфер, вполне возможно потребуется сбросить буфер явным образом. Для этого можно использовать метод flush():

 

std::cout.flush();

 

 

4.7.2. Ввод данных в языке C++

Пример 4.17. Использование объекта cin для суммирования двух целых чисел, введенных пользователем.

 

#include "stdafx.h"

#include <iostream> // Подключение файла iostream

int main() {

int x = 0, у = 0;

std::cout << "x = "; // Вывод приглашения к вводу

std::cin >> x; // Ввод 1-го числа

std::cout << "y = "; // Вывод приглашения к вводу

std::cin >> у; // Ввод 2-го числа

std::cout << "Summa = " << x + у << std::endl; // Вывод суммы

std::cin.ignore(255, '\n'); // Очистка буфера

Std::cin.get(); // Предотвращение закрытия окна консоли

return 0;

}

 

Вывести сообщение об ошибке и прервать выполнение программы можно так:

 

std::cout << "x = "; // Вывод приглашения к вводу

std:: cin >> x; // Ввод значения

if (std::cin.good() == false) { // Проверка ошибки при вводе

std::cout << "Ошибка" << std::endl; // Вывод сообщения

Return 1; // Выход из функции main()

}

 

Пример 4.18. Обработка ошибок ввода.

 

#include "stdafx.h"

#include <iostream> // Подключение файла iostream

int main() {

int x = 0, у = 0;

bool flag = false; // Установка флага ошибки

do {

std::cout << "x = "; // Вывод приглашения к вводу

std::cin >> x; // Ввод 1-го числа

if (!std::cin.good()) { // Проверка ошибки при вводе

std::cout << "Ошибка" << std::endl; // Вывод сообщения

Std::cin.clear(); // Сброс флага ошибки

std::cin.ignore(255, '\n'); // Очистка буфера

}

else flag = true; // Ошибки не было

} while (!flag);

flag = false; // Установка флага ошибки

do {

std::cout << "y = "; // Вывод приглашения к вводу

std::cin >> y; // Ввод 2-го числа

if (!std::cin.good()) { // Проверка ошибки при вводе

std::cout << "Ошибка" << std::endl; // Вывод сообщения

Std::cin.clear(); // Сброс флага ошибки

std::cin.ignore(255, '\n'); // Очистка буфера

}

else flag = true; // Ошибки не было

} while (!flag);

std::cout << "Summa = " << x + у << std::endl; // Вывод суммы

std::cin.ignore(255, '\n'); // Очистка буфера

Std::cin.get(); // Предотвращение закрытия окна консоли

return 0;

}

 

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

 

char str[255]; // Объявление символьного массива

std::cout << "str = "; // Вывод приглашения к вводу

std::cin >> str; // Ввод строки

std::cout << str << std::endl; // Вывод строки

 

Чтобы строка, включающая несколько слов, вводилась полностью, оператор ввода следует заменить другим:

 

Std::cin.getline (str, 255); // Ввод строки

 

 

Ввод-вывод данных в языке C

 

Вывод данных в C

В языке C++ вместо файла stdio.h можно подключать файл cstdio:

 

#include <cstdio>

 

Для вывода данных используются функции: putchar(), puts() и printf().

Функция putchar() предназначена для вывода одиночного символа, например:

 

Std::putchar('w'); // w

Std::putchar(119); // w

 

Функция puts() предназначена для вывода строки. Вывод завершается символом перевода строки. Например:

 

std::puts("String1");

std::puts("String2");

/* Вывод:

String1

String2

*/

 

Функция printf() предназначена для форматированного вывода.

Примеры вывода строки и числа:

 

std::printf("String\n"); // Вывод строки без элементов формата

std::printf("Count %d\n", 10); // Вывод целого числа

std::printf("%s %d\n", "Count", 10); // Вывод строки и целого числа

/* Вывод:

String

Count 10

Count 10

*/

 

Спецификаторы формата имеют следующий синтаксис:

 

%[<Модификаторы>][<Ширина>][.<Точность>]<Тип>

 

Таблица 4.16. <Типы> спецификатора формата

<Тип> спецификатора Описание
c символ
s строка
d или i десятичное целое число со знаком
u десятичное целое число без знака
o восьмеричное число без знака
x или X шестнадцатеричное число без знака в нижнем или верхнем регистре
f вещественное число в десятичном представлении
e или E вещественное число в экспоненциальной форме (буква "е" в нижнем или верхнем регистре)
g или G эквивалентно f, e или E, выбирается более короткая запись числа
p вывод адреса переменной
% символ процента (%)

 

Примеры:

 

std::printf("%с", 'w'); // w

std::printf("%с", 119); // w

std::printf("%s", "String"); // String

std::printf("%d %i", 10, -30); // 10 -30

std::printf("%u", 100); // 100

std::printf("%o %o", 10, 077); // 12 77

std::printf("%#o %#o", 10, 077); // 012 077

std::printf("%x %x", 10, 0xff); // a ff

std::printf("%#x %#x", 10, 0xff); // 0xa 0xff

std::printf("%Х %Х", 10, 0xff); // A FF

std::printf("%#Х %#Х", 10, 0xff); // 0XA 0XFF

std::printf{"%f %f", -18.65781452, 12.5); // -18.657815 12.500000

std::printf{"%#.0f %.0f", 100.0, 100.0); // 100. 100

std::printf("%е", 18657.81452); // 1.865781е+004

std::printf("%е", 0.000081452); // 8.145200е-005

std::printf("%Е", 18657.81452); // 1.865781Е+004

std::printf("%g %g %g", 0.086578, 0.000086578, 1.865Е-005);

// 0.086578 8.6578е-005 1.865е-005

std::printf("%G %G %G", 0.086578, 0.000086578, 1.865E-005);

// 0.086578 8.6578E-005 1.865E-005

int x = 10;

std::printf("%p", &x); // 0012FF60

std::printf("%#p", &x); // 0X0012FF60

std::printf("10%%"); // 10%

 

Параметр спецификатора <Ширина> задает минимальную ширину поля вывода. Например:

 

std::printf("'%3s'", "string"); // 'string'

std::printf("'%10s'", "string"); // ' string'

std::printf("'%10d'", 25); // ' 25'

std::printf("'%10f'", 12.5); // ' 12.500000'

 

Вместо минимальной ширины и точности можно указать символ *. В этом случае значения передаются через параметры функции printf() в порядке указания символов в строке формата. Например:

 

std::printf("'%10.5f'", 3.14159265359); // ' 3.14159'

std::printf("'%.3f'", 3.14159265359); // '3.142'

std::printf("'%7d'", 100); // ' 100'

std::printf("'%.7d'", 100); // '0000100'

std::printf("'%.7d'", 123456789); // '123456789'

std::printf("'%5.7s'", "Hello, world'"); // 'Hello, '

std::printf("'%15.20s'", "Hello, world'"); // ' Hello, world!'

std::printf("'%*.*f'", 10, 5, 3.14159265359); // ' 3.14159'

std::printf("'%.*f'", 3, 3.14159265359); // '3.142'

std::printf("'%*s'", 10, "string"); // ' string'

 

Таблица 4.17. <Модификаторы> спецификатора формата

<Модификатор> спецификатора Описание
# для восьмеричных значений добавляет в начало символ "0", для шестнадцатеричных значений добавляет комбинацию символов "0х" (если используется тип "x") или "0X" (если используется тип "x"), для вещественных чисел указывает всегда выводить дробную точку, даже если задано значение 0 в параметре <Точность>
  задает наличие ведущих нулей для числового значения
задает выравнивание по левой границе области, по умолчанию используется выравнивание по правой границе
пробел вставляет пробел перед положительным числом, а перед отрицательным числом будет стоять минус
+ задает обязательный вывод знака, как для отрицательных, так и для положительных чисел
h предназначен для вывода значения переменной, имеющей тип short int
l (буква "эль") предназначен для вывода значения переменной, имеющей тип long int. Модификатор l можно использовать совместно с типами c и s, для вывода двухбайтного символа и строки, состоящей из двухбайтных символов соответственно
L предназначен для вывода значения переменной, имеющей тип long double

 

Примеры:

 

std::printf("%#o %#о", 10, 077); // 012 077

std::printf("%#x %#x", 10, 0xff); // 0xa 0xff

std::printf("%#X %#X", 10, 0xff); // 0XA 0XFF

std::printf("%#.0f %.0f", 100.0, 100.0); // 100. 100

std::printf("'%7d'", 100); // ' 100'

std::printf("'%07d'", 100); // '0000100'

std::printf("'%5d' '%-5d'", 3, 3); // ' 3' '3

std::printf("'%05d' '%-05d'", 3, 3); // '00003' '3

std::printf("'% d' '% d'", -3, 3); // '-3' ' 3'

std::printf("'%+d' '%+d'", -3, 3); // '-3' '+3'

short int x = 32767;

std::printf("%hd", x); // 32767

long int x = 2147483647;

std::printf("%ld", x); // 2147483647

wchar_t str[] = L"string";

std::printf("%ls", str); // string

long double x = 8е+245;

std::printf("%Le", x); // 8.000000е+245

 

Ввод данных в языке C

В языке C++ вместо файла stdio.h можно подключать файл cstdio.

 

#include <cstdio>

 

Для ввода данных используются функции: getchar(), gets() и scanf().

Функция getchar() предназначена для ввода одиночного символа. Например:

 

char ch;

std::printf("ch = "); // Вывод приглашения к вводу

ch = std::getchar(); // Ввод одиночного символа

 

Функция gets() предназначена для ввода строки, однако применять ее в программе не следует, так как функция не производит никакой проверки длины строки, что может привести к переполнению буфера. Лучше получать строку посимвольно с помощью функции getchar().

 

char line[21]; // Массив на 20 символов + '\0'

std::printf("str = "); // Вывод приглашения к вводу



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-05-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: