Выбрать главу

[Диск]

        while ( 1 )

        {

            /* Ввод значения */

            cout << "Введите значение" ;

            cin >> inputVal ;

            /* Если число отрицательное */

            if ( inputVal < 0 )

            {

                /* Выводим сообщение об ошибке */

                cout << "Не допускается ввод "

                     << "отрицательных чисел\n" ;

                /* Возвращаемся к началу цикла */

                continue ;

            }

            /* Введено приемлемое значение */

        } 

_________________

75 стр. Глава 5. Операторы управления программой

►Вложенные команды управления...76

Возвратимся к проблеме перерисовывания экрана монитора. Конечно, некоторые типы структур циклов можно использовать для прорисовки каждого пикселя линии слева направо ( или для евреев и арабов сканирование экрана осуществляется справа налево? ). Но как реализовать повторяющееся перерисовывание каждой сканируемой линии сверху вниз? ( Для австралийских экранов, наверное, снизу вверх? ) Для этого нужно включить цикл, сканирующий пиксели слева направо, внутрь цикла, сканирующего линии сверху вниз.

В случае если команды одного цикла находятся внутри другого, цикл называют вложенным. В качестве примера вы можете модифицировать программу BreakDemo в программу, которая накапливает сумму чисел любого количества последовательностей. В этой программе, названной NestedDemo, во внутреннем цикле суммируются числа, введённые с клавиатуры, пока пользователь не введёт отрицательное значение. Внешний цикл суммирует полученные суммы значений последовательностей до тех пор, пока накопленная сумма примет отличное от нуля значение.

        /* NestedDemo — вводится последовательность чисел. */

        /*              Числа суммируются, пока пользователь не введёт отрицательное число. Этот процесс будет повторяться, пока общая сумма не станет равной 0. */

        #include <cstdio>

        #include <cstdlib>

        #include <iostream>

        using namespace std ;

        int main( int argc , char* pszArgs[ ] )

        {

             setlocale ( LC_ALL , ".1251" ) ; /* печать русских текстов */

             cout << "Эта программа суммирует "

                   << "последовательности чисел.\n Ввод каждой "

                   << "последовательности завершается "

                   << "вводом отрицательного числа \n"

                   << "Чтобы завершить ввод последовательностей,"

                   << "нужно ввести\nдва отрицательных числа подряд\n" ; 

             /* Внешний цикл работает с последовательностями чисел */

             int accumulator ;

             do

             {

                 /* Начинаем ввод очередной последовательности чисел */

                 accumulator = 0 ;

                 cout << "\nВведите очередную последовательность\n" ;

                 /* Бесконечный цикл */

                 for ( ; ; )

                 {

                      /* Введение очередного числа */

                      int value = 0 ;

                      cout << "Введите очередное число: " ;

                      cin >> value ;

                      /* Если оно отрицательное... */

                      if ( value < 0 )

                      {

                          /* ...выходим из цикла */

_________________

76 стр. Часть 1. Первое знакомство с С++

                          break ;

                      }

                     /* ...иначе добавляем число к общей сумме */

                     accumulator = accumulator + value ;