- •Конспект студента. Коротка хронологія найважливіших етапів розвитку мови :
- •Алфавіт мови.
- •Ідентифікатори
- •Ключові слова
- •Управляючі послідовності
- •Концепція типу даних
- •Основні типи даних
- •Діапазони значень простих типів даних для ibm pc
- •Символьний тип (char)
- •Розширений символьний тип (wchar_t)
- •Логічний тип (bool)
- •Змінні. Клас пам'яті.
- •Типи з плаваючою крапкою (float, double і long double)
- •Перетворення типів.
- •Структура програми
- •Проста програма
- •Змінні і вирази
- •Область дії ідентифікатора
- •Вирази.
- •Порядок обчислення виразів
- •Бітові операції.
- •Введення і виведення даних.
- •Стежте за помилками переповнювання
- •Стежте за помилками неспівпадання типів
- •Читання символьних даних
- •Читання слів з клавіатури
- •Форматування введення-виведення засобами мови с Функція printf()
- •Функція scanf()
- •If (вираз) оператор 1; [else оператор 2;]
Стежте за помилками переповнювання
Якщо ваші програми виконують введення з використанням 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(ios::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 |
примушує ігнорувати провідні пропуски при введенні. |
||
Маніпулятори з параметрами
setbase(int b) |
задає підставу системи числення; |
|
|
resetiosflags(long f) |
скидає прапори, вказані в параметрі; |
||
setiosflags(long f) |
встановлює прапори, вказані в параметрі; |
||
setfill(int ch) |
задає заповнюючий символ; |
||
setprecision(int n) |
задає точність дійсних чисел; |
||
setw(int n) |
задає ширину поля. |
||
Використання маніпуляторів розглянемо на прикладі
cout<<setw(5)<<setfill('*')<<22<<endl;
cout<<hex<<11<<endl;
виведе на екран
***22
В
