Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab04.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
370.18 Кб
Скачать
    1. Операторы переходов

Оператор break

Этот оператор имеет два назначения. Первое – это окончание работы оператора switch. Второе – это принудительное окончание цикла, минуя стандартную проверку условия. Первое назначение подробно рассмотрено выше в этой главе. Здесь же мы рассмотрим второе назначение оператора break.

Когда оператор break встречается в теле цикла, цикл немедленно заканчивается и выполнение программы переходит на строку, следующую за циклом. Например:

#include <stdio.h>

int main(void)

{

int t;

for(t=0; t<100; t++) {

printf(“%d “, t);

if(t==10) break;

}

return 0;

}

Данная программа выводит на экран числа от 1 до 10 включительно и заканчивает работу, поскольку break вызывает немедленный выход из цикла, минуя условие t<100.

Оператор break, как правило, используется в циклах, где особые условия могут вызвать немедленное завершение работы. Ниже приведен пример того, как нажатие на клавишу может остановить выполнение функции look_up():

int look_up(char *name)

{

char tname[40];

int loc;

loc = -1;

do {

loc = read_next_name(tname);

if(kbhit()) break;

} while(!strcmp(tname, name));

return loc;

}

Такие функции можно использовать для поиска имени в файле базы данных. Если файл слишком длинный и надоело ждать, то можно нажать на любую клавишу и выйти из функции до окончания работы. Стандартная функция kbhit() возвращает 0, если не было нажатия клавиши. В противном случае она возвращает ненулевое значение.

break вызывает выход из самого внутреннего цикла. Например:

for(t=0; t<100; t++) {

count = 1;

for(;;) {

printf(“%d “, count);

count++;

if(count == 10) break;

}

}

выводит числа от 1 до 10 включительно 100 раз. Каждый раз, когда встречается break, контроль передается внешнему циклу for.

break, используемый в операторе switch, влияет только на данный switch, но не на цикл, в котором может находится данный switch.

Оператор continue

Работа оператора continue чем-то похожа на работу оператора break. Но вместо форсирования окончания цикла continue переходит к следующей итерации цикла, пропуская оставшийся код тела цикла. Например, следующая процедура выводит только положительные числа:

do {

scanf(“%d”, &x);

if(x<0) continue;

printf(“%d “, x);

} while(x!=100);

В циклах while и do/while оператор continue вызывает переход к проверке условия и затем продолжает работу цикла. В случае цикла for выполняется часть увеличения, затем проверяется условие и, наконец, выполняется само тело цикла. Предыдущий пример может быть изменен для вывода только 100 положительных чисел следующим образом:

for(t=0; t<100; t++) {

scanf(“%d”, &x);

if(x<0) continue;

printf(“%d “, x);

}

В следующем примере оператор continue используется для ускорения выхода из цикла путем форсирования проверки, выполненной ранее:

void code(void)

{

char done, ch;

while (!done) {

ch = getchar();

if(ch == ‘.’) {

done = 1;

continue;

}

putchar(ch+1); /* сдвиг алфавита на одну позицию */

}

}

Можно использовать данную функцию для кодирования сообщений, сдвигая все символы на 1 вверх, т. е. a станет b. Функция завершает работу при обнаружении символа «точка» и вывода на экран символа «точка» не происходит, поскольку благодаря continue выполнение, минуя оператор вывода, переходит к условию проверки, которое обнаруживает, что done истинно, и вызывает выход.

Функция exit()

Функция exit(), находящаяся в стандартной библиотеке, вызывает немедленное окончание работы программы. Поскольку функция exit() останавливает выполнение программы и форсирует возврат в операционную систему, она используется для управления устройствами, и ее используют подавляющее большинство программ. Функция exit() имеет следующий вид:

void exit(int статус);

Она использует заголовочный файл stdlib.h. Значение статуса возвращается в операционную систему.

Для индикации корректности завершения работы exit() традиционно вызывается с аргументом 0. Другие аргументы используются для индикации различного рода ошибок. Можно также использовать предопределенные макросы EXIT_SUCCESS (успешное завершение) и EXIT_FAILURE (завершение с ошибками) в качестве значений для статуса.

exit() используется, когда условия выполнения программы неудовлетворительны. Например, компьютерная игра может требовать специальный графический адаптер. Функция main() данной игры может выглядеть следующим образом:

#include <stdlib.h>

int main(void)

{

if(!special_adapter()) exit(1);

play();

return 0;

}

где special_adapter() – это определенная пользователем функция, возвращающая истину, если необходимый адаптер присутствует. Если такового в системе нет, то данная функция возвращает ложь и программа завершает работу.

В другом примере exit() используется для выхода из программы и возврата в операционную систему:

void menu(void)

{

char ch;

printf(“1. Проверка орфографии\n”);

printf(“2. Корректировка ошибок орфографии\n”);

printf(“3. Вывод ошибок на экран\n”);

printf(“4. Выход из программы\n”);

printf(“Выбери режим: “);

do {

ch = getche(); /* чтение клавиатуры */

switch(ch) {

case ‘1’:

check_spelling();

break;

case ‘2’:

correct_errors();

break;

case ‘3’:

display_errors();

break;

case ‘4’:

exit(0); /* возврат в ОС */

}

} while(ch!=’1’ && ch!=’2’ && ch!=’3’);

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]