Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на C / C++ / Нейбауэр А. Моя первая программа на С.doc
Скачиваний:
182
Добавлен:
02.05.2014
Размер:
3.75 Mб
Скачать

Использование флагов

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

Например, программа перевода значений температур использует цикл do...while для ввода значений:

do

{

printf("Введите значение температуры в пределах от 0 до 100: ");

scanf("%d", &temp);

}

Одна и та же подсказка появляется во всех случаях как при первом вводе, так и в случае ввода ошибочного значения. Возможно, было бы неплохо вывести на экран другое сообщение, указывающее пользователю, что он ввел неправильное значение. Текст программы, в которой именно так и сделано, приведен в Листинге9.4.

Листинг 9.4. Программа, в которой используется флаг для отображения альтернативных сообщений.

/*flag.c*/

main()

{

int temp;

float celsius;

char repeat;

char flag;

do

{

flag = 'n';

do

{

if (flag == 'n');

printf("Введите значение температуры от 0 до 100: ");

else

printf("Вводи значение правильно, дурак: ");

scanf("%d", &temp);

flag = 'y';

}

while (temp < 0 || temp > 100)

celsius = (5.0 / 9.0) * (temp - 32);

printf("%d градусов по Фаренгейту соответствует %6.2f по Цельсию\n", temp, celsius);

printf("Желаете продолжить ввод?");

repeat = getchar();

putchar('\n');

}

while (repeat == 'y' || repeat == 'Y');

}

Переменной с именем flag в начале каждого внешнего цикла присваивается значение 'n'. В начале каждого повтора внутреннего цикла значение флага проверяется. Если оно равно 'n', то программа выводит на экран одно сообщение, при любом другом значении флага на экран выводится второе сообщение.

При первом выполнении цикла флаг имеет значение 'n', поэтому на экран выводится первое сообщение. Когда пользователь вводит число, значение переменной меняется на 'y'. Однако если пользователь ввел неправильное значение, внутренний цикл снова повторяется, но в этом случае условие (flag == 'n') не выполнится, так что на экран будет выведено второе сообщение.

Когда пользователь вводит правильное значение температуры, оно преобразуется в значение по шкале Цельсия, и внешний цикл повторяется. При следующем выполнении внешнего цикла флаг переустанавливается заново и пользователю предоставляется новый шанс ввести правильное значение температуры. Обратите внимание, что значение флага переустанавливается при каждом выполнении внешнего цикла, так же как значения счетчика и аккумулятора.

Хотя флаг и может быть определен с любым типом данных, рекомендуется все же выбирать для него тип int или char. Значения, присваиваемые флагу, также целиком определяет автор программы. В нашем примере использовалось значение 'n', чтобы отобразить правильный ввод данных, и 'y', чтобы отобразить неправильный ввод. Вы можете использовать любые другие значения, какие подскажет ваша фантазия.