Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Оператор break




Оператор goto

Необходимости в применении goto практически нет. В результате чрезмерного использования операторов goto программа плохо читается, она становится "похожей на спагетти". В некоторых случаях его применение все же уместно, например, если нужно покинуть глубоко вложенные циклы.

Для оператора goto всегда необходима метка. Метка — это идентификатор с последующим двоеточием. Метка должна находится в той же функции, что и goto, переход в другую функцию невозможен.

Общая форма оператора goto следующая:

goto метка;... метка: Метка может находиться как до, так и после оператора goto.

Оператор break применяется в двух случаях.

Во-первых, в операторе switch с его помощью прерывается выполнение последовательности case (см. раздел "Оператор выбора — switch" ранее в этой главе). В этом случае оператор break не передает управление за пределы блока.

Во-вторых, оператор break используется для немедленного прекращения выполнения цикла без проверки его условия, в этом случае оператор 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;}

выводит на экран числа от 0 до 10. После этого выполнение цикла прекращается оператором break, условие t < 100 при этом игнорируется.

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

void look_up(char *name){ do { /* поиск имени 'name' */ if(kbhit()) break; } while(!found); /* process match */}

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

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

for(t=0; t<100; ++t) { count = 1; for(;;) { printf("%d ", count); count++; if(count==10) break; }}

100 раз выводит на экран числа от 1 до 9. Оператор break передает управление внешнему циклу for.

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

Функция exit()

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

Общая форма функции exit() следующая:

void exit (int код_возврата);

Значение переменной код_возврата передается вызвавшему программу процессу, обычно в качестве этого процесса выступает операционная система. Нулевое значение кода возврата обычно используется для указания нормального завершения работы программы. Другие значения указывают на характер ошибки. В качестве кода возврата можно использовать макросы EXIT_SUCCESS и EXIT_FAILURE (выход успешный и выход с ошибкой). Функция exit() объявлена в заголовочном файле <stdlib.h>.

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

void menu(void){ char ch; printf("1. Проверка правописания\n"); printf("2. Коррекция ошибок\n"); printf("3. Вывод ошибок\n"); printf("4. Выход\n"); printf(" Введите Ваш выбор: "); do { ch = getchar(); /* чтение клавиши */ 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'); }

Задача. Написать программу, которая вычисляет частное и остаток от деления двух введенных

целых чисел. Программа должна работать в цикле, то есть запрашивать значения делимого и

делителя, выводить результат, снова запрашивать данные и т.д. Если оба числа равны нулю,

надо выйти из цикла и завершить работу программы. Предусмотреть сообщение об ошибке в

том случае, если второе число равно нулю, а первое — нет. Особенность этой задачи состоит в том, что при входе в цикл мы не можем определить,

надо ли будет выполнить до конца очередной шаг. Необходимая информация поступает лишь

при вводе данных с клавиатуры. Поэтому здесь используется бесконечный цикл

while(1){...} (напомним, что в языке Си единица считается истинным условием). Выйти

из такого цикла можно только с помощью специального оператора break.

В то же время, если второе число равно нулю, то оставшуюся часть цикла не надо выпол-

нять. Для этого служит оператор continue.

#include <stdio.h>

#include <conio.h>

main()

{

int A, B;

while (1) // бесконечный цикл, выход только по break!

{

printf ("\nВведите делимое и делитель:");

scanf ("%d%d", &A, &B);

if (A == 0 && B == 0) break; // выход из цикла

if (B == 0) {

printf ("Деление на ноль");

continue; // досрочный переход к новому шагу цикла

}

printf ("Частное %d остаток %d", A/B, A%B)

}

getch();

}




Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 326; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.