Почему следует избегать оператора goto
Со временем нелестные высказывания в адрес оператора goto участились, впрочем, вполне заслуженно. С помощью оператора goto можно осуществлять переход в любую точку программы — вперед или назад. Такое беспорядочное использование этого оператора привело к появлению запутанных и абсолютно непригодных для восприятия программ, получивших жаргонное название "спагетти". Поэтому последние двадцать лет преподаватели программирования во всем мире твердили студентам одну и ту же фразу: "Никогда не используйте оператор goto".
На смену оператору goto пришли конструкции с несколько более сложной структурой, но и с более широкими возможностями: for, while и do...while. Несмотря на то что после полного искоренения оператора goto структура программ значительно прояснилась, негативные высказывания в его адрес следует признать преувеличенными. Как любой инструмент программирования, при правильном использовании оператор goto может оказаться достаточно полезным. В силу этого комитет ANS1 принял решение оставить этот оператор в языке. Правда, вместе с этим родилась шутка: "Дети! Использование этого оператора в домашних условиях небезопасно!"
Организация циклов с помощью оператора while
В циклах, организованных с помощью оператора while, выполнение последовательности операций продолжается до тех пор, пока условие продолжения цикла истинно. В примере программы в листинге 7.1 значение переменной counter увеличивалось до тех пор, пока не стало равным пяти. Листинг 7.2 демонстрирует тот же алгоритм, реализованный с помощью оператора while.
Листинг 7.2. Организация цикла с помощью оператора while
1: // Листинг 7.2.
2: // Организация цикла с помощью оператора while
3:
4: #include
5:
6: int main()
7: {
8: int counter = 0; // присвоение начального значения
9:
10: while(counter < 5) // проверка условия продолжения цикла
11: {
12: counter++; // тело цикла
13: cout << " counter: " << counter << "\;n";
14: }
15:
16: cout << " Complete. Counter: " << counter << ".\n";
17: return 0;
18: }
Результат:
counter: 1
counter: 2
counter: 3
counter: 4
counter: 5
Complete. Counter: 5.
Анализ:Эта несложная программа показывает пример организации цикла с помощью оператора while. В начале каждой итерации проверяется условие, и, если оно выполняется, управление передается на первый оператор цикла. В нашем примере условию продолжения цикла удовлетворяют все значения переменной counter, меньшие пяти (строка 10). Если условие выполняется, запускается следующая итерация цикла. В строке 12 значение счетчика увеличивается на единицу, а в строке 13 выводится на экран. Как только значение счетчика достигает пяти, тело цикла (строки 11 — 14) пропускается и управление передается в строку 15.
Сложные конструкции с оператором while
Сложность логического выражения, являющегося условием в операторе while, не ограничена. Это позволяет использовать в конструкции while любые логические выражения C++. При построении выражений допускается использование логических операций: && (логическое И), 11 (логическое ИЛИ), а также ! (логическое отрицание). В листинге 7.3 показан пример использования более сложных условий в конструкциях с оператором while.
Листинг 7.3. Сложные условия в конструкциях while
1: // Листинг 7.3.
2: // Сложные условия в конструкциях while
3:
4: include
5:
6: int main()
7: {
8: unsigned short small;
9: unsigned long large;
10: const unsigned short MAXSMALL=65535;
11:
12: cout << "Enter a small number: ";
13: cin >> small;
14: cout << "Enter a large number: ";
15: cin >> large;
16:
17: cout << "small: " << small << "...";
18:
19: // на каждой итерации проверяются три условия
20: while (small < large && large > 0 && small < MAXSMALL)
21: {
22: if (small % 5000 == 0) // после каждых 5000 строк выводится точка
23: cout << ".";
24:
25: small++;
26:
27: large-=2;
28: }
39:
30: cout << "\nSmall: " << small << " Large: " << large << endl;
31: return 0;
32: }
Результат:
Enter а small number: 2
Enter а large number: 100000
small: 2
Small: 33335 Large: 33334
Анализ:Программа представляет собой простую логическую игру. Вначале предлагается ввести два числа — small и large. После этого меньшее значение увеличивается на единицу, а большее уменьшается на два до тех пор, пока они не "встретятся". Цель игры: угадать число, на котором значения "встретятся".
В строках 12—15 осуществляется ввод значений. В строке 20 проверяется три условия продолжения цикла.
1. Значение переменной small не превышает значения large.
2. Значение переменной large неотрицательное и не равно нулю.
Читать дальше