|
Хочу получить удостоверение. Сколько стоит оплата? |
Оператор do-while
Цикл do-while отличается от циклов for и while тем, что использует проверку окончания цикла в конце тел цикла. В таком случае при использовании циклов do-while произойдет хотя бы один раз вход в цикл, а условие окончания цикла будет проверяться в конце первого прохода. В противоположность циклам for и while, которые выполняются много раз или вообще не выполняются ни разу, все зависит от переменной управления циклом. Поскольку цикл do-while выполняется по крайней мере один раз, то его лучше применять только в тех участках кода где нет сомнений, что цикл должен выполниться хотя бы раз. Так, например, если ваша программа создает меню пользователя, то в случае, если даже пользователь захочет сразу выйти из программы, он или она должен знать по каким клавишам происходит выход из программы. Ниже приведен синтаксис цикла do-while:
do {
операция_1;
операция_2;
операция_3;
операция_4;
} while(тестовое_условие);
В приведенной ниже программе используется цикл do-while для расчета количества букв и слов во вводимой пользователем фразе:
//==========================================================
// Name : dow_while.cpp
// Author : Marat
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//==========================================================
#include <iostream>
using namespace std;
#define LENGTH 80
#define NULL_TERM 1
int main() {
char cSentence [LENGTH + NULL_TERM] ;
int iNumChars = 0, iNumWords = 1;
do {
cout << "Please enter your sentence: ";
cin.getline(cSentence,LENGTH) ;
} while(cSentence [0] == '\0');
while(cSentence [iNumChars] != '\0')
{
if (cSentence [iNumChars] == ' ')
iNumWords++;
iNumChars++;
}
cout << "You entered " << iNumChars << " characters"<<" in "<<iNumWords << " words"<<endl;
return 0;
}
Результат:
Please enter your sentence: omni animal ex ovo You entered 18 characters in 4 words
В цикле do-while повторяется запрос на ввод предложения, и пользователь должен ввести хотя бы один символ. Если просто нажать клавишу ENTER, будет вызвана функция getline(), записывающая нулевой символ в позицию первого элемента массива. Как только предложение будет введено, программа перейдет к выводу рассчитанной статистики.
В приведенной выше программе мы впервые столкнулись с использованием директивы препроцессора #define:
#define LENGTH 80 #define NULL_TERM 1
Директива #define работает следующим образом. Всякий раз, когда программа встечает лексему LENGTH, последняя заменяется на 80, а NULL_TERM, соответственно, на 1. Директива #define очень удобна при задании размера массивов (см. ниже):
#define array_size 10 double a[array_size]; int b[array_size];
Достаточно изменить размер массивов (10) в директиве #define, как автоматически изменятся размеры массивов a и b.