ANSI C 7

ANSI C 7



3 STEROWANIE

3.7    | Instrukcje break i continue

Czasami wygodnie jest mieć możliwość kontrolowanego opuszczenia pętli w inny sposób niż przez sprawdzenie warunku na początku lub na końcu pętli. Instrukcja break pozwala na wcześniejsze opuszczenie pętli for, while i do tak samo, jak instrukcji switch. Instrukcja ta powoduje natychmiastowy wyskok z najbardziej zagnieżdżonej pętli lub instrukcji switch, w której występuje.

Następująca funkcja trim usuwa znaki odstępu, tabulacji i nowego wiersza występujące na końcu tekstu, wykorzystując instrukcję break do opuszczenia pętli po wy. kryciu pierwszego od końca znaku różnego od odstępu, znaku tabulacji i nowego wiersza.

/* trim: usuń z s końcowe znaki odstępu, tabulacji, nowego wiersza */ int trim(char sf ])

{

int n;

for (n = strlen(s)-1; n >= 0; n—)

if (s[n] !=’’&& s[n] != ’\f && s|nl != ’\n’) break; s[n+1] = ’\0’; return n;

}

Funkcja strlen zwraca długość tekstu. Pętla for rozpoczyna działanie od ostatniego znaku tekstu i - posuwając się wstecz - kolejno bada każdy znak szukając pierwszego, który nie jest znakiem odstępu, tabulacji i nowego wiersza. Pętlę przerywa się pc wykryciu takiego znaku lub wtedy, kiedy n stanie się ujemne (co oznacza, że przebadano cały tekst). Sprawdź, że algorytm jest poprawny nawet wówczas, gdy tekst je$ pusty lub zawiera jedynie białe znaki.

Instrukcja continue jest spokrewniona z break, ale stosuje się ją rzadziej; powoduj przerwanie bieżącego i wykonanie od początku następnego kroku zawierającej ją pęd for, while lub do. Dla pętli while i do oznacza to natychmiastowe sprawdzenie warunku zatrzymania, natomiast w pętli for powoduje przekazanie sterowania do częśc przyrostowej. Instrukcja continue dotyczy jedynie pętli; w instrukcji switch nie n* zastosowania. Instrukcja continue występująca wewnątrz pętli w instrukcji switcpowoduje przejście do następnego kroku pętli.

Przykładem może być fragment programu przetwarzającego tylko nieujemne elemer< ty tablicy a; elementy ujemne są pomijane.

for (i = 0; i < n; i++) {

if (afi] < 0) /* pomiń element ujemny */ continue;

/* przetwarzaj element nieujemny */

}

Instrukcję continue często stosuje się wtedy, gdy następująca po niej część pętli jest tak skomplikowana, że odwrócenie warunku i tworzenie następnego poziomu może zagnieździć program zbyt głęboko.


Instrukcja goto i etykiety

Język C oferuje „bezgranicznie nadużywaną” instrukcję skoku goto oraz etykiety wskazujące miejsca, do których można skakać. Formalnie instrukcja goto nigdy nie jest konieczna, a w praktyce prawie zawsze można się bez niej obejść. W tej książce dotychczas jej nie używaliśmy.

Niemniej jednak zdarzają się sytuacje, w których instrukcja goto może się przydać. Najczęściej jest ona stosowana do zaniechania przetwarzania w głęboko zagnieżdżonych strukturach programu, na przykład do jednoczesnego przerwania działania dwóch lub więcej pętli. W tym przypadku nie można po prostu użyć instrukcji break, gdyż przerywa tylko jedną z zawierających ją pętli - tę, w której występuje. A więc:

for (...) for (...){

• • •

if (niepowodzenie)

goto error; /* skocz do obsługi błędów */

}

• • •

error:

/* napraw sytuację lub wypisz komunikat */

Ten schemat jest wygodny wówczas, gdy obsługa błędów nie jest banalna oraz gdy błędy mogą być wykryte w wielu miejscach.

Etykieta ma taką samą postać, jak nazwa zmiennej i jest zakończona dwukropkiem. Etykietę można dołączyć do każdej instrukcji w tej samej funkcji, w której występuje instrukcja goto. Zasięgiem etykiety jest więc cała ta funkcja.

97


7 - Język ANSI C


Wyszukiwarka

Podobne podstrony:
ANSI C 4 3 STEROWANIE instrukcją break dla uniknięcia takiego przejścia. Słabą stroną przechodzeni
Język JAVA - instrukcje - break, continue Dla wszystkich pętli stosować można polecenia break i cont
163 § 2. Pole i objętość Czasami wygodnie jest zamiast wielokątów użyć innych figur, których
ANSI C 1 Sterowanie W każdym języku programowania instrukcje sterujące ustalają kolejność wykonywa
ANSI C 7 DODATEK A PRZEWODNIK JĘZYKA C______ Etykiety przypadków (case) i domyślne (default) są uż
skanuj0062 (56) Rozdział 3. ♦ Instrukcje sterujące i funkcje 75 Szczególną uwagę należy zwrócić na i
str Silnik obcowzbudny zasilany z nawrotnego prostownika sterowanego5.3. Instrukcja5.3.1. Opis ukła
275 (32) 450 W niektórych przypadkach wygodnie jest zapisać wzór (XI1.9) w postaci: « —- ”7-" P
prog+z2a V V V*rA. U cl ćwiczenie 2 1. Należy unikać instrukcji break gdy komplikuje ona kod Zapisz
SDC11480 switch(wyrażenie){ case stałal: sekwencja instrukcji break; case stała2: sekwencja instrukc
SDC11502 Instrukcje skoku - continue ■Przykład - funkcja koduje znak zastępując go następnym w alfab
57 INSTRUKCJE WARUNKOWE> return 0; A czasami może być celowym zabiegiem (tzw. "fall-through”

więcej podobnych podstron