Программирование >>  Процедурные приложения 

1 ... 33 34 35 [ 36 ] 37 38 39 ... 150


Инструкция continue

Инструкция continue заставляет программу пропустить все оставшиеся строки цикла, но сам цикл не завершается. Действие этой инструкции аналогично выполнению команды goto, указывающей на строку условия цикла. Если условное выражение возвратит true, цикл будет продолжен.

Ниже показан текст программы, реализующей игру в угадывание чисел и использующей возможности инструкции continue:

* continue.с

* В этой программе на языке С демонстрируется использование

* инструкции continue.

#include <stdio.h> #define TRUE 1 #define FALSE 0

int main ()

int ilucky number = 77, iinput val, inumber of tries = 0, iam lucky = FALSE; while(!iam lucky) { printf( Введите число: ); scanf( %d ,&iinput val); inumber of tries++; if(iinput val == ilucky number) iam lucky = TRUE; else { if(iinput val > ilucky number) printf( Ваше число больше!\n ); else

printf( Ваше число меньше!\n ); continue; } printf( Вам потребовалось всего %d попыток, чтобы отгадать счастливое число! , inumber of tries); } return(0); }

В цикле while пользователю предлагается ввести свой вариант числа, после него значение переменной inumber of tries, хранящей число попыток, увеличивается на единицу. Если попытка оказалась неудачной, программа переходит в ветвь else, в которой пользователю дается подсказка и выполняется инструкция continue, подавляющая вывод поздравительного сообщения функцией printf(). Тем не менее, выполнение цикла продолжается. Как только будет получено соответствие введенного и счастливого чисел, переменной iam lucky будет присвоено значение true, в результате чего будет выполнена функция printf( ) .

Совместное использование инструкций break и continue

Для решения некоторых, , задач удобно комбинировать инструкции break и continue. Рассмотрим следующую программу на языке С:

* breakcon.c

* В этой программе на языке С используются инструкции break и continue.

#include <stdio.h> #include <ctype.h> #define NEWLINE \n int main()



int c;

while((c=getchar()) != EOF) { if(isascii( с) == 0) {

printf( ВведеннIЙ символ не является ASCII-символом; ) ;

printf( продолжение невозможно\n );

break;

if(ispunct(c) II isspace(c)) {

putchar(NEWLINE);

continue;

if(isprint(c) == 0) continue; putchar(c); } return(0);

На вход программы поступают такие данные:

word control < exclamation! apostrophe period.

Вот что будет получено в результате:

word control exclamation apostrophe period

Данная программа считывает поступающие символы до тех пор, пока не будет введен признак конца файла [Ctrl+Z]. Затем производится анализ введенных символов, удаляются непечатаемые знаки, а все слова разделяются разрывами строк. Все эти действия выполняются с помощью функций, описанных в файле CTYPE.H: isascii(), ispunct(),isspace() и isprint(}. Каждая функция получает в качестве аргумента символ и возвращает ноль или единицу в зависимости от принадлежности этого символа соответствующей категории.

Функция isascii() проверяет, является ли символ обычным ASCII-символом (т.е. его код находится в диапазоне 0-127), функция ispunct() - является ли символ знаком препинания, функция isspace() - является ли символ пробельным, а функция isprint() - является ли символ печатаемым. С помощью этих функций программа определяет, следует ли продолжать выполнение, а если продолжать, то как поступать с каждым из введенных символов.

Первая проверка в цикле while позволяет выяснить, поступают ли входные данные в читаемом формате. Ведь на вход программы могут подаваться данные из бинарного файла, в результате чего программа окажется бесполезной. В этом случае отображается предупреждающее сообщение, а выполнение цикла прерывается инструкцией break.

Если формат входных данных подходящий, то проверяется, является ли введенный символ пробелом или знаком препинания. Если это так, выводится пустая строка и выполняется инструкция continue, инициирующая следующую итерацию цикла.

Далее проверяется, является ли введенный символ печатаемым. Обратите внимание, что во входных данных содержится символ < ([Ctri+Q]). Поскольку это непечатаемый символ, он не отображается вовсе, и выполняется инструкция continue, завершающая текущую итерацию цикла.

В случае, если анализируемый символ является текстовым, выполняется функция putchar(), выводящая его на экран.

Инструкция return

Иногда необходимо прервать выполнение программы задолго до Того, как будут выполнены все ее строки. Для этой цели в языках C/C++ существует уже знакомая вам инструкция return, которая завершает выполнение той функции, в которой она была вызвана. Если вызов произошел в функции main() , то завершается сама программа. В этом случае инструкция return принимает единственный целочисленный аргумент, называемый кодом завершения. В



операционных системах UNIX и MS-DOS нулевой код воспринимается как нормальное завершение программы, тогда как любое другое значение является признаком ошибки.

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

Следующая программа вычисляет среднее арифметическое ряда чисел, содержащего не более 30-ти значений, а также находит минимальное и максимальное значение ряда. Если пользователь хочет задать ряд, размер которого превышает максимально допустимый, выдается предупреждающее сообщение и выполнение программы прерывается с помощью инструкции return.

return.cpp

В этой программе на языке C++ демонстрируется использование

инструкции return.

#include <iostream.h> #define LIMIT 30 int main() {

int irow, irequested qty, iscores[LIMIT], imin score, imax score; float fsum = 0, faverage;

cout<< \nВведите число значений ряда: ; cin >> irequested qty; if(irequested qty > LIMIT) {

cout<< \пВы можете ввести не более << LIMIT << значений.\n cout<< \n>>> Программа завершена. <<<\n ; return(0); } .

for(irow = 0; irow < irequested qty; irow++) {

cout << \nВведите irow+1 << -иэлементряда: cin >> iscores[irow];

for(irow = 0; irow < irequested qty; irow++) fsum = fsum + iscores[irow];

faverage = fsum/(float)irequested qty; imaxscore = imin score = iscores[0];

for(irow =1;irow < irequested qty; irow++) { if(iscores[irow] > imax score) imax score = iscores[irow]; if(iscores[irow] < imin score) imin score = iscores[irow];

cout<< \nМаксимальное значение = << imax score;

cout<< \nМинимальное значение = << imin score;

cout<< \nСреднее значение = << faverage; return(0); }

Функция exit( )

Существует библиотечная функция exit(),которая аналогична инструкции return и объявлена в файле STDLIB.H. В этом файле также описаны две дополнительные константы, которые могут быть переданы в качестве аргументов этой функции: exit success(сигнализирует об успешном завершении программы) и exit failure(сигнализирует об ошибке). Использование этих констант позволяет сделать текст программы чуть более понятным, хотя компилятор выдает предупреждение, если не встречает в функции main() ни одной инструкции return.

Рассмотрим слегка видоизмененный вариант предыдущей программы.



1 ... 33 34 35 [ 36 ] 37 38 39 ... 150

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика