Capitolul 3.7. Break
:: Programare :: C & C++ :: Capitolul 3
Pagina 1 din 1
Capitolul 3.7. Break
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.
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.
Subiecte similare
» Capitolul 3.2.IF-ELSE
» Capitolul 3.3. ELSE-IF
» Capitolul 3.5. WHILE si FOR
» Capitolul 1.1. Pornirea
» Capitolul 6.7. Campuri
» Capitolul 3.3. ELSE-IF
» Capitolul 3.5. WHILE si FOR
» Capitolul 1.1. Pornirea
» Capitolul 6.7. Campuri
:: Programare :: C & C++ :: Capitolul 3
Pagina 1 din 1
Permisiunile acestui forum:
Nu puteti raspunde la subiectele acestui forum
|
|