Страница 63 из 69
Если вы уберете оператор break после вызова do_file_menu, то
при вводе символа F будет вызываться do_file_menu, а затем будет
вызвана функция run_program.
Однако иногда вам нужно сделать именно так. Рассмотрим
следующий пример:
typedef enum( sun, mon, tues, wed, thur, fri, sat, ) days;
main()
{
days today;
...
swith (today) {
case mon :
case tues :
case wed :
case thur :
case fri : puts("Иди работать!");break;
case sat : printf("Убери во дворе и ");
case sun : puts("Расслабься!");
}
В этом операторе switch для значений от mon до fri выполня-
ется одна и та же функции put, после которой оператор break ука-
- 519,520 -
зывает на выход из switch. Однако, если today равно sat, выполня-
ется соответствующая функция printf, а затем выполняется puts
("Расслабься!"); если же today равно sun, выполняется только пос-
ледняя функция puts.
Команды передачи управления
----------------------------------------------------------------
Это дополнительные команды, предназначенные для использова-
ния в управляющих операторах или для моделирования других управ-
ляющих структур. Оператор return позволяет вам досрочно выйти из
функции. Операторы break и continue предназначены для использова-
ния в цикле и позволяют пропустить последующие операторы програм-
мы. Условный оператор (?:) позволят сжать определенные выражения
типа if..else в одну строку.
Один совет: подумайте дважды перед использованием каждой ко-
манды передачи управления (за исключением, конечно, return). Ис-
пользуйте их в тех случаях, когда они представляют наилучшее ре-
шение, но помните, что чаще всего вы можете решить возникшую
перед вами проблему проблему без их помощи. Особенно избегайте
оператора goto: операторы return, break или continue наверняка
заменят его вам.
- 521,522 -
Оператор return
-----------------------------------------------------------------
Существует два основных способа использования оператора
return.
Во-первыx, в том случае, когда функция возвращает значение,
и вам необходимо использовать его в зависимости от того, какое
значение возвращается в вызыващую программу, например:
int imax(int a, int b);
{
if (a > b) return(a);
else return(b);
}
Здесь функция использует оператор return для возвращения
максимального из двуx переданныx ей значений.
Второй способ использования оператора return состоит в воз-
можности выxода из функции в некоторой точке до ее завершения.
Например, функция может определить условие, по которому произво-
дится прерывание. Вместо того, чтобы помещать все основные опера-
торы функции внутрь оператора if, для выхода можно использовать
оператор return. Если функция имеет тип VOID (т.е. не возвращаю-
щает никакого значения), можно написать return без возвращаемого
значения.
Рассмотрим модификацию программы imin, предложенную ранее:
int imin(int list[], int size))
{
int i, minindx, min;
if (size <= 0) return(-1);
...
}
В этом примере, если параметр size меньше либо равен нулю,
то массив list пуст, в связи с чем оператор return вызывает выход
из функции.
Заметим, что в случае ошибки возвращается значение -1. Т.к.
-1 никогда не может быть индексом массива, вызывающая программа
- 523,524 -
регистрирует факт возникновения ошибки.
Оператор break
-----------------------------------------------------------------
Иногда бывает необходимо выйти из цикла до его завершения.
Рассмотрим следующую программу:
#define LIMIT 100
#define MAX 10
main()
{
int i,j,k,score;
int scores[LIMIT][MAX];
for (i = 0; i < LIMIT; i++) {
j = 0;
while (j < MAX-1) {
printf("Введите следующее значение #%d: ",j);
scanf("%d", score);
if (score < 0)
break;
scores[i][++j] = score;
- 525,526 -
}
scores[i][0] = j;
}
}
Рассмотрим оператор if (score < 0) break;. Он указывает, что
если пользователь введет отрицательное значение score, цикл while
прерывается. Переменная j используется и в качестве индекса
scores и в качестве счетчика общего количества элементов в каждой
строке; это значение записывается в первом элементе строки.
Вспомните, пожалуйста, использование оператора break в опе-
раторе switch, представленное ранее. Там break указывает програм-
ме выйти из оператора switch; здесь он указывает программе выйти
из цикла и продолжить работу. Кроме оператора switch оператор
break может быть использован во всех трех циклах (for, while и do
... while), однако его нельзя использовать в конструкции if ...
else или в теле главной процедуры main для выхода из нее.
Оператор continue