Програмування С, С++теорія та практика (частина 1)
1.6.1 Оператор циклу з передумовою шПіІе
Оператор м>кіІе використовується для організації циклічного виконання оператора або серії операторів, поки виконується певна умова.
Синтаксис :
мИІІе (<логічний вираз>) оператор;
|
Рис. 1.7. Синтаксис оператора мііііе |
Цикл закінчується у наступних випадках :
1. умовний вираз у заголовку приймає нульове значення;
2. у тілі циклу досягнуто місця, де розташований оператор Ьгеак;
3. у тілі циклу виконаний оператор геґигп;
У перших двох випадках керування передається оператору, розташованому безпосередньо за циклом, у третьому випадку активна на той момент функція завершує свою роботу, повертаючи якесь значення.
Знову ж таки нерідкою помилкою програмістів, що працювали раніше на Паскалі, є використання замість оператора порівняння (==) оператора присвоювання (=). Наприклад, наступний фрагмент створить нескінчений цикл:
/* некоректне використання оператору циклу */ іп£ таіп^оігі.)
{
іп£ і=5 ;
мЬі1е(і=5) /* змінній і присвоїти значення 5 */
{
ргіп^£("%гі\п",і);
:++;
}
}
Компілятор Сі попередить про некоректне присвоювання в даному випадку, виправити яке особливих труднощів не викличе.
Втім, часто такий цикл використовується для перевірки відповіді користувача на питання з програми ("так чи ні ?"): /* фрагмент використання мЬіІе */
ргіп^£ ("Підтверджуєте ? Так чи ні ?(у/п);");
зсап£("%с",&сЬ);
мЬіІе (сЬ!='у' && сЬ!='п')
{
ргіп^£("\п Відповідайте так чи ні . . (у/п);");
зсап£("%с",&сЬ);
}
Тіло циклу почне виконуватися, якщо користувач введе будь-який символ, відмінний від у або п. Цикл виконується доти, доки користувач не введе або ‘у ’ , або ‘п ’.
Цікаво розглянути й наступний приклад, що застосовує оператор м>кіІе у функції підрахунку факторіалу:
Іопд £асЬогіа1(іп£ питЬег)
{
1опд ■Ьо'ЬаІ;
£о'Ьа1=пиліЬег ; мЬіІе (--питЬег)
£о£а1*=питЬег; ге'Ьигп £о£а1;
}
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99

