- •Операції відношення
- •Цикл for
- •Ініціалізуючий вираз
- •Умова виконання циклу
- •Інкрементуючий вираз
- •Число виконань циклу
- •Кілька операторів в тілі циклу
- •Блоки і області видимості змінних
- •Виявлення помилок
- •Варіанти циклу for
- •Кілька ініціалізуючих виразів та умов циклу
- •Цикл while
- •Кілька операторів в циклі while
- •Пріоритети арифметичних операцій і операцій відношення
- •Цикл do
- •Вибір типу циклу
- •Розгалуження
- •Умовний оператор if
- •Кілька операторів в тілі if
- •If всередині циклів
- •Оператор if...Else
- •Функція getche()
- •Умова з присвоюванням
- •Вкладені розгалуження if...Else
- •Оператор switch
- •Оператор break
- •Інший варіант програми з використання switch і ключового слова default
- •Порівняння switch I if...Else
- •Умовна операція
- •Логічні операції
- •Операція логічного і
- •Цілі величини в якості булевих
- •Інші оператори переходу
- •Оператор break
- •Оператор continue
- •Оператор goto
- •Підсумок
- •Питання
Функція getche()
Далі приведений приклад демонструє використання розгалуження if...else всередині циклу while. Крім того, в ньому використовується бібліотечна функція getche(). Програма підраховує кількість слів і символів в рядку, який вводиться користувачем з клавіатури.
#include <iostream>
using namespace std;
#include <conio.h> //для getche()
int main()
{
int chcount=0; //число непробільних символів
int wdcount=1; //число пробілів
char ch=’a’; //ch повинна мати певне значення
cout<<”Vvedit rjadok: “;
while(ch!=’\r’) //цикл поки не буде натиснута клавіша Enter
{ch=getche();
if(ch==’ ‘) //якщо символ є пробілом
wdcount++;
else
chcount++;
}
cout<<”\nSliv “<<wdcount<<endl<<”Bukw “<<(chcount-1)<<endl;
return 0;
}
Досі ми використовували для вводу тільки об’єкт cin і операцію >>. Такий спосіб вводити значення передбачає, що після вводу значення користувач натискає клавішу Enter. Це правильно і по відношенню до окремих символів: користувач спочатку вводить символ, а потім натискає Enter. В даному випадку програмі потрібно обробляти символ відразу після його появи, не чекаючи на натиск Enter. Таку можливість забезпечує бібліотечна функція getche(). Ця функція не має аргументів, а її опис міститься в заголовочному файлі CONIO.H. Значення, що повертається функцією getch(), присвоюється змінній ch і друкує це значення на екрані. Інша функція, під назвою getch(), теж «перехоплює» введений символ, але не виводить його на екран.
Умова з присвоюванням
Перепишемо попередню програму, скоротивши її на один рядок і продемонструвавши аспекти, що стосуються пріоритету операцій. Одержана конструкція може видатися незвичайною, але вона часто викоритовується не тільки в С++, а також в С.
#include <iostream>
using namespace std;
#include <conio.h> //для getche()
int main()
{
int chcount=0; //число непробільних символів
int wdcount=1; //число пробілів
char ch=’a’; //ch повинна мати певне значення
cout<<”Vvedit rjadok: “;
while((ch!=getche())!=’\r’)
{if(ch==’ ‘) //якщо символ є пробілом
wdcount++;
else
chcount++;
}
cout<<”\nSliv “<<wdcount<<endl<<”Bukw “<<(chcount-1)<<endl;
return 0;
}
Значення, що повертається функцією getche(), присвоюється змінній ch, як і раніше, але сама операція присвоювання знаходиться всередині умови циклу while. Присвоєне значення порівнюється з ‘\r’ для того, щоб вияснити, продовжити виконання циклу чи ні. Ця конструкція працює правильно, тому що операція присвоєння значення сама одержує це значення. Якщо, наприклад, функція getche() повертає символ ‘a’, то при цьому не тільки відбувається присвоювання значення змінній, але й сам вираз
(ch=getche())
одержує значення ‘a’, яке бере участь в перевірці.
Той факт, що операції присвоювання мають власне значення, використовується в множинному присвоюванні, такому як:
x=y=z=0;
Подібні конструкції є цілком коректними в С++, в результаті такого присвоювання всі три змінні – x, y, z – дістають значення 0.
Зовнішні круглі дужки у виразі
(ch!=getche())
необхідні, оскільки операція присвоювання = має більш низький пріоритет, ніж операція відношення !=.
Таким чином, оператор while в нашій програмі виконує багато корисних дій. Він не тільки перевіряє, чи є значення змінної ch символом ‘\r’, але ще одержує символ з клавіатури і присвоює його змінній ch/
