for în C

Bucla cu contor: inițializare, condiție verificată înainte de fiecare pas și actualizare, toate pe un singur rând.

Sintaxă
for (initializare; conditie; pas) {
    ...
}
for (int i = 0; i < n; i++) { ... }   // declarație în for: C99

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 de i < n la un tablou cu n elemente. Ultimul pas citește t[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--). Un size_t este mereu >= 0, deci bucla nu se oprește; scrie for (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.