Твій асистент

Основи програмування та алгоритмічні мови

Електронний довідник



Знайомство з Visual C++. Способи введення-виведення даних

Введення-виведення даних

Visual С++ підтримує декілька способів введення-виведення даних залежно від типу програмного проекту (консольний додаток чи проект WindowsForms) та використовуваних команд.

Введення-виведення в стилі С++

Для введення-виведення даних у С++ найчастіше використовуються потокові команди cin>> (вхідний потік) та cout<< (вихідний потік) бібліотекиiostream.h, наприклад:
cout<< "Введіть число: " ;
cin>> x;
cout<< "Квадрат цього числа: " << x*х << endl;

Перша з команда cout<< виведе рядок символів і залишить курсор на тому ж самому рядку. При цьому символи рядка виводитимуться по одному, доки не зустрінеться завершальний символ "\0". Друга команда дозволить ввести значення змінної x. Третя команда сформує рядок, поряд виведе числове значення та перемістить курсор на новий рядок (маніпулятор endl ).

До речі, крім маніпулятора endl, новий рядок можна сформувати виведенням символу '\n'. Ще одним часто використовуваним спеціальним символом для кращого вигляду виведених даних є символ табуляції '\t', який формує відступ.

Зауважимо, що при виведенні тексту для коректного відображення літер кирилиці слід застосувати команду setlocale(0,".1251") (або setlocale(LC_ALL, "Russian") ). Виведення замість літер кирилиці усілякої абракадабри спричинено тим, що Visual Studio в консольних додатках використовує для набраного тексту кодування Windows1251, а для введеного тексту–кодування DOS. Коректно відобразити введений за допомогою cin>> текст дозволить команда setlocale(LC_ALL,".OCP"), повернувши початкові налаштування кодування.

Доволі зручною є можливість виведення за допомогою cout<< чисел не лише в десятковому форматі, а і в шістнадцятковому чи вісімковому, використовуючи модифікатори dec,hex і oct усередині вихідного потоку:
setlocale(0,".1251");
cout << "Вісімковий:\t\t" << oct << 10 << " " << 255 << endl;
cout << "Шістнадцятковий:\t" << uppercase << hex << 10 << " " << 255 << endl;
cout << "Десятковий:\t\t" << dec << 10 << " " << 255 << endl;

Результатом виконання цих команд будуть рядки:
Вісімковий:        12 377
Шістнадцятковий:   А FF
Десятковий:        10 255

Слід зазначити, що використання одного з цих модифікаторів залишиться в силі, допоки чи то програма не завершиться, чи то не буде використано інший модифікатор.

Для форматування даних при виведенні командою cout<< можна використовувати модифікатор setw, який дозволяє задавати числа. При цьому зазначена модифікатором ширина є дійсною лише для одного числа. Для можливості використання модифікаторів слід долучити заголовний файл iomanip. Якщо виведене число має меншу, аніж зазначену у модифікаторі setw ширину, перед ним будуть виведені пробіли. Так, команди
#include <iomanip>
. . . . .
cout<< "x=" << setw(1) << 155 << endl;
cout<< "x=" << setw(3) << 155 << endl;
cout<< "x=" << setw(5) << 155 << endl;

сформують рядки у такому вигляді:
x=155
x=155
x=  155

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

При виведенні дійсних чисел, особливо коли йдеться про виведення матриць дійсних чисел, доситьдоречним є обмеження кількості знаків після десяткової крапки за допомогою маніпулятора setprecision(int count) :
cout << fixed << setprecision(3) << (13.5 / 2) << endl; //6.750
cout << fixed << setprecision(2) << 24.16425 << endl; // 24.16

Використаний тут маніпулятор fixed задає виведення дійсних чисел з рухомою крапкоюу форматі з фіксованою крапкою.

Команда cout<< дозволяє перенаправляти виведення на пристрій чи до файла за допомогою операторів перепризначення виведення операційної системи. Однак, повідомлення про помилки звичайно недоречно спрямовувати до файла і при цьому не виводити на екран. Для уникнення таких ситуацій існує спеціальний вихідний потік cerr , пов'язаний зі стандартним пристроєм помилок. Наприклад, команда
cerr << "Повідомлення про помилку" << endl;

cформує відповідне повідомлення на екрані, а операційна система не дозволить перенаправити виведення на інший пристрій чи до файла.