Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Приклад 1. Простий приклад потокового вводу-виводу

Поиск


#include <iostream.h>

 

void main()

{

int a;

char c;

float f;

double d;

 

cin >> a;

cin >> c;

cin >> f;

cin >> d;

 

cout << a;

cout << c;

cout << f;

cout << d;

cout << “\nThis is a short string”;

 

cout << “\nAnd this is a three”

<< “\nline message that”

<< “\nis a little longer”;

}


С++ підтримує визначення стандартних шляхів вводу і виводу даних, але замість файлів використовуються потоки. Потік cin – стандартний символьний потік вводу, зазвичай пов’язаний з клавіатурою. Він замінює stdin, який використовувався з тією ж метою в ANSI C. Потік cout подібний до stdout і зазвичай пов’язанй з таким символьним вивідним пристроєм, як дисплей персонального комп’ютера. Крім цього, в Borland C++ визначені і інші стандартні потоки: cerr (замінює stderr як стандартний потік виводу) і clog (аналога якому в ANSI C не було). Потік clog подібний до cerr, але забезпечує буферизацію, тоді як cin, cout і cerr її не забезпечують. Кожен з цих чотирьох потоків розглядається окремо.

Чотири стандартних потоки cin, cout, cerr і clog автоматично відкриваються до початку виконання функції main() і закриваються після її завершення. Так що не слід турбуватися про оголошення, відкриття і закриття потоків. А ось очищення потоків в залежності від вимог програми слід включити (#include) стандартний заголовочний файл iostream.h. Об’єкт потоку повинен стояти в лівій частині операторів << або >>. Кілька потокових операцій, навіть тоді, коли вони відносяться до об’єктів різних типів, можуть бути об’єднані в одну стрічку. Комбінація символів >> називається оператором вилучення, оскільки вони використовуються для отримання символів з потоку. Символи << називаються оператором вставки, оскільки використовуються для поміщення символів в потік. Приклад 1 можна переписати наступним чином:

 

void main()

{

int a;

char c;

float f;

double d;

 

cin >> a >> c >> f >> d; //ввід всіх даних

cout << a << c << f << d; //вивід всіх даних

 

Компілятор відслідковує перетворення типів і форматування даних. З першого оператора компілятор генерує чотири окремих операції вводу (по одній для кожної змінної). Оператор >> – ліво-асоціативний, тому змінна a читається перед змінною c. З другого оператора отримуємо чотири операції виводу. Оператор <<, як і оператор >>, ліво-асоціативний, тому a виводиться перед c. Форматування здійснюється автоматично самим потоком, що знижує рівень необхідних подробиць до мінімального. Керувати форматуванням можна за допомогою спеціальних функцій-маніпуляторів.

Введення у ANSI C, на відміну від С++, вимагало від програміста передавати кілька аргументів, що збільшувало імовірність помилок. Підводним каменем в С, об який спотикалися дуже багато програмістів, було використання старих функцій scanf(...) і printf(...) для того, щоб зробити щось, подібне до наступного:

 

int i;

float f;

scanf(“%d”, i); /*передача параметра по значенню*/

printf(“%d”, f); /*неправильний форматуючий символ*/

 

замість правильного запису:

 

int i;

float f;

scanf(“%d”, &i); /*це правильно*/

printf(“%f”, f); /*і це вірно*/

 

3. Введення-виведення типів char i char*

 

Символьні операції в потоках гранично прості, оскільки не потребують ніякого форматування. Зчитуючи дані з потоку, треба мати на увазі, що все, що зчиталося, розглядається як символи, в тому числі і роздільники (або символи пропуску – while space character). Роздільниками є пробіл, табуляція, переведення стрічки або символ, який зазвичай використовується для розділення елементів даних. Якщо серед символів, що зчитуються, є службові, то вони повинні бути оброблені самим програмістом або маніпулятором, котрому явно належить це зробити. Приклад 2 показує вилучення символів з потоку.

Приклад 2. Коротка програма, що вилучає символи з потоку

 
 

#include <iostream.h>

 

void main()

{

char c;

cout << “\nHit a key ”;

 

cin >> c;

cout << “\nThe key typed was: ” << c;

}

 
 

Програма відображає на екрані повідомлення і потім чекає натискання довільної клавіші і повернення каретки. Після цього за допомогою оператора вилучення читається потік cin, і прочитане значення використовується в операторі виводу. Щоб ввести дані в програму, користувач повинен натиснути <Enter>. Читання вхідного символа без натискання <Enter> можна виконати за допомогою непотокової функції, що підтримує ввід необроблених даних, наприклад getch() або getche():

 

char c = gecht();

 

якщо програма буде вимагати саме такої поведінки потоку cin, то слід створити новий похідний клас, що забезпечує потрібну поведінку.

 



Поделиться:


Последнее изменение этой страницы: 2016-04-26; просмотров: 337; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.226.222.132 (0.007 с.)