Capitolul 3.7. Break

Vezi subiectul anterior Vezi subiectul urmator In jos

Capitolul 3.7. Break

Mesaj  zooky la data de Mier Mar 18, 2009 12:14 pm

Adesea este convenabil sa controlam iesirile din bucle altfel decit testind conditia la inceputul sau sfirsitul buclei. Instructiunea break ofera o iesire mai devreme din for, while, do si switch. O instructiune break face ca bucla (sau switch-ul) cea mai din interior sa se termine imediat.
Urmatorul program sterge blancurile si taburile de la sfirsitul fiecarei linii de intrare, folosind un break pentru a iesi din bucla la (primul) cel mai din dreapta caracter nonblanc sau nontab

#define MAXLINE 1000 ;
main() /* sterge caracterele albe de la sfirsitul liniei */
{
int n;
char line[MAXLINE];
while ((n = getline(line, MAXLINE)) > 0) {
while( --n > 0)
if (line[n] != ' ' && line[n] != '\t'
&& line[n] != '\n')
break;
line[n+1] = '\0';
printf("%s\n", line);
}
}

getline returneaza lungimea liniei. Bucla while din interior incepe cu ultimul caracter al lui line (sa ne amintim ca --n decrementeaza pe n inainte de a-i folosi valoarea) si cauta inapoi primul caracter care nu este blanc, tab sau (newline) linie noua. Bucla este sparta cind este gasit unul din acestea sau cind n devine negativ (adica atunci cind intreaga linie a fost analizata). Ar trebui sa verificati ca este corect si in cazul in care linia este formata numai din caractere albe ( de spatiere). O alternativa la break consta in a pune testul chiar in bucla:

while ((n = getline(line, MAXLINE)) > 0) {
while (--n >= 0
&& (line[n] == ' ' || line[n] == '\t' || line[n] == '\n'))
;
...
}

Aceasta este inferioara versiunii precedente, deoarece testul este mai greu de inteles. Testele care necesita un amestec de && ,||,! sau paranteze sint in general interzise.
avatar
zooky
Moderator
Moderator

Numarul mesajelor : 147
Data de inscriere : 15/03/2009
Varsta : 24
Localizare : Cernatesti City

Vezi profilul utilizatorului http://e-learning.forumhit.ro

Sus In jos

Vezi subiectul anterior Vezi subiectul urmator Sus


 
Permisiunile acestui forum:
Nu puteti raspunde la subiectele acestui forum