Articolo originale: https://www.freecodecamp.org/news/for-loops-in-c/

Se hai bisogno di ripetere un blocco di codice più volte, puoi utilizzare dei loop.

Queste ripetizioni dello stesso blocco di codice, per un certo numero di volte, sono dette iterazioni e il numero delle iterazioni viene determinato dalla condizione del loop.

I loop for e while sono ampiamente utilizzati in quasi tutti i linguaggi di programmazione.

In questo tutorial, parleremo dei loop for in C. In particolare, imparerai:

  • la sintassi per usare i loop for
  • come funzionano i loop for in C
  • l'eventualità di creare loop for infiniti

Iniziamo!

Sintassi e funzionamento dei loop for in C

In questa sezione, imparerai la sintassi di base dei loop for in C.

La sintassi generale per usare un loop for è mostrata di seguito:

for(initialize; check_condition; update)
    {
        //esegui questo
    }

Nel blocco qui sopra:

  • initialize è l'istruzione di inizializzazione – qui viene inizializzata la variabile di controllo del loop.
  • check_condition è la condizione che determina se il loop deve continuare.
Finché check_condition risulta vera, il corpo del loop viene eseguito.
  • L'istruzione update aggiorna la variabile di controllo del loop dopo l'esecuzione delle istruzioni nel corpo del loop.

Struttura di controllo dei loop for in C

La struttura di controllo è la seguente:

  1. Inizializzazione del conteggio – l'istruzione initialize viene eseguita. Questo accade solo una volta, all'inizio del loop.
  2. Verifica della condizione del loop – viene valutata l'espressione check_condition. Se la condizione è true, si passa allo step 3. Se è false, si esce dal loop.
  3. Esecuzione delle istruzioni nel corpo del loop.
  4. Aggiornamento del conteggio – viene eseguita l'istruzione update.
  5. Si torna allo step 2.

Tutto ciò è illustrato qui sotto:

image-66
Loop for in C

Ora che hai un'idea di come funziona un loop for, prendiamo un esempio semplice per vedere un loop for in azione.

Esempio di loop for in C

Scriviamo un semplice loop for per contare fino a 10 e stampare il valore del conto durante ogni passaggio attraverso il loop.

#include <stdio.h>

int main() 
{
   for(int count = 0; count <= 10; count++)
   {
       printf("%d\n",count);
   }
   return 0;
}

Nel blocco di codice qui sopra:

  • count è la variabile contatore ed è inizializzata a 0.
  • La condizione del loop è count <= 10. Dunque, count può essere al massimo 10 affinché il loop continui.
  • Nel corpo del loop, viene stampato il valore di count.
  • E il valore di count viene aumentato di 1.
  • Il controllo poi raggiunge la condizione count <= 10 e le iterazioni proseguono finché la condizione risulta verificata.
  • In quest'esempio, la condizione del loop count < = 10 diventa false quando il valore di count è 11 – e il loop termina.

Ed ecco l'output:

//Output
0
1
2
3
4
5
6
7
8
9
10

Dovresti sempre fare attenzione che il tuo loop termini effettivamente ad un certo punto.

Sai che il loop continua finché la condizione check_condition è true, mentre si ferma quando check_condition diventa false. Ma cosa accade se la condizione del loop è sempre true?

Bene, questo è ciò che accade se ti imbatti in un loop infinito. Il loop prosegue per sempre, finché il programma non va in crash o il tuo sistema si spegne.😢

Imparerai di più sui loop infiniti nella prossima sezione.

Loop for infiniti

Se il tuo loop non si ferma e continua ad oltranza, allora, hai un loop infinito. Facciamo qualche esempio per capire meglio.

▶ Nella costruzione del loop for, se non specifichi la condizione del loop (check_condition), viene assunta come true di default.

Come risultato, la condizione non diventa mai falsa e il loop continua a iterare indefinitamente fino a che non interrompi forzatamente il programma.

Ecco un loop infinito nello snippet di codice qui sotto:

#include <stdio.h>

int main()
{
    
    for(int i = 0; ; i++) //la condizione di test non è indicata
    {
        printf("%d ",i);
    }
    
    return 0;
}

▶ Vediamo un altro esempio.

Inizializzi la variabile contatore i a 10. Aumenti i di 1 dopo ogni iterazione.

Nota che la condizione di test è i > 0, ma il valore di i sarà sempre maggiore di 0.

Quindi, otterrai un loop infinito:

#include <stdio.h>

int main()
{
    
    for(int i = 10; i > 0 ; i++) //la condizione di test è sempre TRUE
    {
        printf("%d ",i);
    }
    
    return 0;
}

▶ In quest'esempio, la variabile contatore i è inizializzata a 0, ma decresce di 1 a ogni iterazione.

Di conseguenza, i sarà sempre minore di 10,  la condizione i < 10 risulterà sempre true e il loop sarà infinito.

#include <stdio.h>

int main()
{
    
    for(int i = 0; i < 10 ; i--) //la condizione di test è sempre TRUE
    {
        printf("%d",i);
    }
    
    return 0;
}

Per evitare di eseguire loop infiniti, dovresti definire correttamente la condizione del loop.

Se sei un principiante, porti queste domande potrebbe aiutarti:

Cosa voglio che faccia questo loop?
Quante volte voglio che il loop venga eseguito?
Quando dovrebbe fermarsi?

Poi, puoi proseguire e costruire il tuo loop di conseguenza. 🙂

Conclusione

Spero che questo tutorial ti sia stato d'aiuto.

Per ricapitolare, abbiamo imparato la sintassi e il funzionamento dei loop for. Abbiamo anche anticipato la possibilità di definire dei loop for infiniti e parlato di come evitarli, definendo la condizione di loop con attenzione.

Ci vediamo presto per un altro tutorial. Fino ad allora, buona programmazione!