Опубликован: 10.12.2015 | Уровень: для всех | Доступ: платный
Лекция 5:

Оператор do-while

< Лекция 4 || Лекция 5 || Лекция 6 >

Цикл 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.

< Лекция 4 || Лекция 5 || Лекция 6 >
Зося Ковалева
Зося Ковалева

Хочу получить удостоверение. Сколько стоит оплата?

Aleksey Aplaev
Aleksey Aplaev
Россия, Chelybinsk
Александр Сидоров
Александр Сидоров
Россия, Самара