- •Структура программы на языке с
- •Int main(список параметров)
- •Библиотека и компоновка
- •Словарь терминов
- •Выражения
- •Переменные
- •Инициализация переменных
- •Константы
- •Строковые константы
- •Специальные символьные константы
- •Оператор присваивания
- •Множественные присваивания
- •Арифметические операции
- •Операции увеличения (инкремента) и уменьшения (декремента)
- •Сводка приоритетов операций
- •Выражения
- •Явное преоразование типов: операция приведения типов
- •Операция определения размера sizof
- •Операторы
- •Int a, b, c; // объявление переменных
- •Пробелы и круглые скобки
- •Логические значениия истина (True) и ложь (False) в языке с
- •Условные операторы Оператор if
- •If (выражение) оператор;
- •Int magic; /* магическое число */
- •Int guess; /* попытка игрока */
- •Int magic; /* магическое число */
- •Int guess; /* попытка игрока */
- •If(k) statement 2; /* этот if */
- •Int magic; /* магическое число */
- •Оператор выбора - switch
- •Вложенные операторы switch
- •Цикл for
- •Бесконечный цикл
- •Варианты цикла for
- •Бесконечный цикл
- •Цикл for без тела цикла
- •Цикл while
- •Случае цикл требует повторить ввод. Цикл do-while
- •Цикл do-while часто используется в функциях выбора пунктов меню. Если пользователь вводит допустимое значение, оно возвращается в качестве значения функции. В противном
- •Оператор перехода
- •Оператор return
- •Оператор goto
- •Оператор break
- •Функция exit()
- •Void exit (int код_возврата);
- •Оператор continue
- •Int n, sum; // sum - сумма цифр числа
- •Оператор-выражение
- •Далее адреса Операция получения адреса (&) и раскрытия ссылки (*)
- •Одномерные массивы
Оператор break
Оператор 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();
}