Ce face for
for are trei părți separate prin punct și virgulă: inițializarea (rulează o dată, la început), condiția (verificată înainte de fiecare repetare) și pasul (rulează după fiecare repetare). Bucla se oprește când condiția devine falsă.
Din C99 poți declara contorul direct în for: for (int i = 0; ...). Variabila există doar în buclă. Oricare dintre cele trei părți poate lipsi; for (;;) este o buclă infinită, oprită de obicei cu break.
Pentru tablouri, convenția în C este indexarea de la 0 și condiția i < n. Când n vine din sizeof sau strlen (tip size_t), folosește și pentru contor size_t, ca să nu amesteci tipuri cu și fără semn.
Exemple
Exemplul 1: Tabla înmulțirii cu 7
#include <stdio.h>
int main(void) {
for (int i = 1; i <= 5; i++) {
printf("7 x %d = %d\n", i, 7 * i);
}
return 0;
}
Rezultat
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
Exemplul 2: Suma prețurilor dintr-un tablou
Contorul este size_t, la fel ca numărul de elemente calculat cu sizeof.
#include <stdio.h>
int main(void) {
double preturi[] = {12.50, 7.99, 30.00, 4.25};
size_t n = sizeof preturi / sizeof preturi[0];
double total = 0;
for (size_t i = 0; i < n; i++) {
total += preturi[i];
}
printf("%zu produse, total %.2f lei\n", n, total);
return 0;
}
Rezultat
4 produse, total 54.74 lei
Exemplul 3: Două variabile și numărătoare inversă
Partea de pas poate actualiza mai multe variabile, separate prin virgulă.
#include <stdio.h>
int main(void) {
for (int i = 0, j = 5; i < j; i++, j--) {
printf("i=%d j=%d\n", i, j);
}
for (int s = 3; s > 0; s--) {
printf("%d... ", s);
}
printf("Start!\n");
return 0;
}
Rezultat
i=0 j=5
i=1 j=4
i=2 j=3
3... 2... 1... Start!
Greșeli frecvente
- Scrii
i <= nîn loc dei < nla un tablou cunelemente. Ultimul pas citeștet[n], în afara tabloului. - Pui punct și virgulă după paranteză:
for (i = 0; i < 5; i++);. Bucla are corpul gol, iar blocul de după rulează o singură dată. - Numeri descrescător cu
size_t:for (size_t i = n - 1; i >= 0; i--). Unsize_teste mereu>= 0, deci bucla nu se oprește; scriefor (size_t i = n; i-- > 0; ).
Comenzi înrudite
while și do-while: Repetă un bloc cât timp o condiție este adevărată; do-while rulează blocul cel puțin o dată, apoi verifică.break, continue și goto: break iese din buclă, continue trece la repetarea următoare, iar goto sare la o etichetă, folosit în C mai ales pentru curățenie la erori.Tablouri (array): Un șir de elemente de același tip, așezate unul după altul în memorie și accesate prin index, de la 0.sizeof: Operatorul care spune câți octeți ocupă un tip sau o variabilă; calculat de compilator, rezultatul are tipul size_t.