С++ для начинающих

Инструкция do while


Представим, что нам надо написать программу, переводящую мили в километры. Структура программы выглядит так:

int val;

bool more = true; // фиктивное значение, нужное для

                  // начала цикла

while ( more ) {

    val = getValue();

    val = convertValue(val);

    printValue(val);

    more = doMore();

}

Проблема заключается в том, что условие вычисляется в теле цикла. for и while требуют, чтобы значение условия равнялось true до первого вхождения в цикл, иначе тело не выполнится ни разу. Это означает, что мы должны обеспечить такое условие до начала работы цикла. Альтернативой может служить использование do while, гарантирующего выполнение тела цикла хотя бы один раз. Синтаксис цикла do while таков:

do

    инструкция



while ( условие );

инструкция выполняется до первой проверки условия. Если вычисление условия дает false, цикл останавливается. Вот как выглядит предыдущий пример с использованием цикла do while:

do {

    val = getValue();

    val = convertValue(val);

    printValue(val);

} while doMore();

В отличие от остальных инструкций циклов, do while не разрешает объявлять объекты в своей части условия. Мы не можем написать:

// ошибка: объявление переменной

// в условии не разрешается

do {

    // ...

    mumble( foo );

} while ( int foo = get_foo() ) // ошибка

потому что до условной части инструкции do while мы дойдем только после первого выполнения тела цикла.

Упражнение 5.14

Какие ошибки допущены в следующих циклах do while:

 (a)

do

    string rsp;

    int vail, va12;

    cout << "Введите два числа: ";

    c-in >> vail >> va12;

    cout << "Сумма " << vail

         << " и " << va12

         << " = " << vail + va12 << "\n\n"

         << "Продолжить? [да][нет] ";

    cin >> rsp;

while ( rsp[0] != 'n' );

(b)

do {

    // ...

} while ( int iva1 = get_response() );

(c)

 do {

        int ival = get_response();

        if ( iva1 == some_value() )

            break;

    } while ( iva1 );

    if ( !iva1 )

    // ...

Упражнение 5.15

Напишите небольшую программу, которая запрашивает у пользователя две строки и печатает результат лексикографического сравнения этих строк (строка считается меньшей, если идет раньше при сортировке по алфавиту). Пусть она повторяет эти действия, пока пользователь не даст команду закончить. Используйте тип string, сравнение строк и цикл do while.



Содержание раздела