Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Читання слів з клавіатури




Читання символьних даних

Стежте за помилками неспівпадання типів

Стежте за помилками переповнювання

Якщо ваші програми виконують введення з використанням cin, остерігайтеся можливих помилок, що виникають при введенні користувачем невірного числа. Наприклад, запустите програму, яку ви тільки що створили. Коли програма запитає вас ввести ваше улюблене число, введіть число 1000000 і натисніть ENTER. При цьому програма не зможе відобразити число 1000000 як введене значення. Натомість виникне помилка переповнювання, оскільки 1000000 перевищує найбільше значення, яке може зберігати тип int.

Якщо ви уважно розглянете програму, то звернете увагу, що cin присвоює введене число змінної типу int.

Як вже обговорювалося, програма припускає, що користувач вводить значення в діапазоні від -32768 до 32767. Якщо замість введення числа поза цим діапазоном, користувач вводить букви або інші символи, то виникає інша помилка — помилка неспівпадання типів. Іншими словами, програма чекала значення одного типу (int), а користувач ввів значення іншого типу (char).


Наступна програма читає символ в змінну типу char

#include <iostream.h>

void main(void)

{

char letter;

cout «"Введіть будь-який символ і натисніть Enter: ";

cin» letter;

cout «"Був введений символ " «letter «endl;

}


Наступна програма використовує cin для читання значення типу long:

# iostream.h>

void main(void)

{

long value;

cout «"Введіть велике число і натисніть Enter: ";

cin» value;

cout «"Вило введено число " «value «endl;}


 

Форматування введення-виведення засобами мови С++

Існують два способи форматування введення/виведення.

Перший спосіб передбачає використання функцій для установки певних прапорів форматування, які перераховані в класі ios_base

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 fixed = 0x1000 unitbuf = 0x2000 stdio = 0x4000 };

Розглянемо що роблять перераховані вище прапори.

Прапор Опис  
skipws Наступні на початку символи-роздільники (пропуски, символи табуляції і нового рядка) при виконанні введення відкидаються.
left Здійснюється введення з лівим вирівнюванням
right Здійснюється введення з правим вирівнюванням (за умовчанням)
internal Знак або префікс системи числення вирівнює зліва, число вирівнює справа
dec Чисельні значення виводяться в десятковій формі (за умовчанням)
oct Чисельні значення виводяться у вісімковій формі
hex Чисельні значення виводяться в шістнадцятковій формі
showbase Дозволяє при виведенні указувати числову базу (десяткову, вісімкову, шістнадцяткову)
showpoint Приводить до виведення десяткової коми і нулів справа для всіх чисел з плаваючою комою поза залежністю, потрібно це чи ні
uppercase При виведенні чисел з плаваючою крапкою при використанні експоненціальної форми виводиться велика буква E. Також при виведенні чисел в шістнадцятковій формі символ 'x' виводиться у верхньому регістрі.
showpos Призводить до того, що перед додатнім числом буде виводиться знак "+"
scientific Числа з плаваючою комою виводяться з використанням наукової нотації
fixed Числа з плаваючою комою виводяться в нормальній нотації
unitbuf При кожній операції вставки виведення дані негайно заноситься в потік
             

Тепер необхідно познайомитися з функціями, які встановлюють і скидають ці прапори.

Перша функція, яку ми розглянемо, - це функція setf(), використовувана для установки прапорів

long setf(long flags);

Функція приймає як параметр розглянуті вище прапор або прапори, сполучені між собою за допомогою побітового АБО. Вона повертає попереднє значення прапора. Розглянемо приклад:

cout.setf(ios::hex); cout. setf (ios::showpos); cout<<123<<" " <<123.45<<"\n"; cout<<67<<" " <<678.9<<"\n";виведе на екран 7b +123.45 43 +678.9 теж саме буде на екрані після виконання наступного коду cout. setf (ios::hex | ios::showpos); cout<<123<<" " <<123.45<<"\n"; cout<<67<<" " <<678.9<<"\n";

Для відключення встановлених прапорів потрібно використовувати функцію unsetf(). Вона має наступний прототип:

long unsetf(long flags);

Функція повертає значення попередньої установки прапора і скидає прапори, визначувані параметром flags. Приклад:

cout.setf (i o s:: showpos | ios:: hex); cout <<123<<" "<<123.45<<"\n"; cout. unsetf (ios:: showpos | ios:: hex); cout <<123<<" "<<123.45<<"\n";виведе на екран 7b +123.45 123 123.45

Окрім прапора форматування також можна встановити ширину поля потоку, символ для заповнення і число цифр після десяткової коми. Для цього використовуються наступні функції:

int width(int len);char fill(char ch);int precision(int num);

Функція width() встановлює ширину поля і повертає поточну ширину. Друга функція - fill() встановлює поточний символ заповнення і повертає попередній символ заповнення. За умовчанням використовується пропуск. А функція precision встановлює точність чисел з плаваючою крапкою. У науковому режимі ця функція визначає кількість цифр після десяткової коми. У звичайній нотації функція позначає кількість цифр, що виводяться. Точність, встановлена за умовчанням, рівна 6. Функція width() впливає тільки на одне виведення інформації, а після цього в дію вступають параметри прийняті за умовчанням. У випадку з рештою двох функцій нові установки залишаються діяти до їх явного оновлення. Приведемо приклад:

cout. width (10); cout. fill('*'); cout<<123<<"\n"; cout. width (10); cout<<456<<"\n\n"; cout<<"Using precision \n"; float price1 = 20.405f; float price2 = (float)1.9+8.0/9.0; cout<<price1<<"\n"<<price2<<"\n\n"; cout. precision(2); cout<<price1<<"\n"<<price2<<"\n\n"; cout. setf (ios::scientific); cout<<price1<<"\n"<<price2<<"\n\n"; виведе на екран *******123 *******456 Using precision 20.405 2.78889 20 2.8 2.04e+001 2.79e+000

Другий спосіб - це використання маніпуляторів.

Маніпулятори є спеціальними функціями, які дозволяють змінювати прапори потоку. Існують маніпулятори з параметрами і без. Якщо Ви використаєте маніпулятори з параметрами, підключите файл iomanip. h

Маніпулятори без параметрів:

ends - поміщає у вихідний потік нульовий символ;  
endl поміщає у вихідний потік символ кінця рядка і викликає метод flush;
flush вивантажує буфер потоку;
dec, hex, oct встановлюють підстави 10, 16 і 8 відповідно;
ws примушує ігнорувати провідні пропуски при введенні.
       



Поделиться с друзьями:


Дата добавления: 2014-12-07; Просмотров: 361; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.017 сек.