CodeGym /Corsi /C# SELF /Ciclo while: introduzione e particolarità d'uso

Ciclo while: introduzione e particolarità d'uso

C# SELF
Livello 4, Lezione 1
Disponibile

1. Introduzione

Nella programmazione spesso bisogna fare le stesse cose tante volte di fila. Per esempio:

  • Scorrere tutti gli elementi di una lista.
  • Leggere valori dalla tastiera finché l'utente non inserisce quello giusto.
  • Calcolare la somma di tutti i numeri da 1 a 100.
  • Chiedere la password all'utente finché non la inserisce correttamente.

Se provi a fare tutto questo senza cicli, il codice diventa lungo, noioso e impossibile da scalare. Immagina di scrivere una calcolatrice e di sommare i numeri da 1 a 10 a mano:

int sum = 0;
sum += 1;
sum += 2;
sum += 3;
// ... e così per 10 volte. Eh già.
Ripetere a mano senza ciclo — scomodissimo!

Ti annoierai prima di finire! La soluzione sono i cicli. Ti permettono di descrivere le ripetizioni in modo chiaro e compatto. Oggi vediamo il ciclo più base, ma dannatamente utile — il while.

2. Introduzione al ciclo while

Sintassi e schema base

Il ciclo while è il "pappagallo" della programmazione: ripete lo stesso pezzo di codice finché una certa condizione è vera. Appena la condizione diventa falsa, il pappagallo si zittisce (il ciclo finisce).


while (condizione)
{
    // Corpo del ciclo
}
Scrittura del ciclo while con blocco di comandi

Diagramma

Ecco un semplice diagramma a blocchi per capire come funziona il ciclo while:

3. Esempi: il ciclo while in azione

Contatore classico

Facciamo un programmino che conta da 1 a 5 e stampa i numeri:

int i = 1;
while (i <= 5)
{
    Console.WriteLine($"Passo n° {i}");
    i++; // Non dimenticare di aumentare il contatore!
}
// Stampa:
// Passo n° 1
// Passo n° 2
// Passo n° 3
// Passo n° 4
// Passo n° 5

Attenzione: se ti dimentichi di aumentare la variabile i, il ciclo non finirà mai (il nostro pappagallo diventa immortale e ripete all'infinito). Questo si chiama ciclo infinito — roba che fa paura.

Input da tastiera fino al valore giusto

Spesso il ciclo serve per "spremere" l'utente finché non dà la risposta giusta:

string password = "";
while (password != "qwerty")
{
    Console.Write("Inserisci la password: ");
    password = Console.ReadLine();
}
Console.WriteLine("Benvenuto!");

Qui il programma chiede di inserire la password finché non scrivi la magica "qwerty". Occhio: se togli la riga password = Console.ReadLine();, il ciclo diventa di nuovo infinito (continua a chiedere la password ma non legge mai l'input — si blocca per sempre come un robot rotto).

4. Tipi e scenari d'uso del ciclo while

Ciclo while normale

Questo ciclo, come visto sopra, controlla la condizione prima della prima iterazione. Se la condizione è falsa subito — il corpo del ciclo non viene eseguito nemmeno una volta.

Esempio: condizione falsa subito

int i = 10;
while (i < 5)
{
    Console.WriteLine(i); // Non verrà mai eseguito!
}

Che, in effetti, è logico. Proprio come scritto qui.

Cicli while annidati

A volte serve un ciclo dentro un altro ciclo. Per esempio, scorrere tutte le righe e in ognuna controllare tutti i caratteri. Per ora è un po' un'avventura, ma ecco un esempio semplice:

int i = 1;
while (i <= 3)
{
    int j = 1;
    while (j <= 2)
    {
        Console.WriteLine($"i = {i}, j = {j}");
        j++;
    }
    i++;
}

// i = 1, j = 1
// i = 1, j = 2
// i = 2, j = 1
// i = 2, j = 2
// i = 3, j = 1
// i = 3, j = 2

Vedremo meglio i cicli annidati tra qualche lezione, volevo solo spaventarti un po' :)

Ciclo infinito

A volte i cicli finiscono, a volte — vivono per sempre.

while (true)
{
    Console.WriteLine("Sono eterno!");
}

Si usa raramente, di solito per qualche processo in background (tipo un server), ma capita anche nella pratica.

5. Come non fare cavolate: errori comuni con while

In programmazione il ciclo è come l'elettricità: figo, ma bisogna conoscere le regole di sicurezza.

Problema 1: ciclo infinito per distrazione

Spessissimo chi inizia si dimentica di aggiornare la variabile da cui dipende la condizione. Così il ciclo va "all'infinito" e devi chiudere il programma a forza (tipo con Ctrl + C).

int i = 1;
while (i <= 5)
{
    Console.WriteLine(i);
    // i++;  // OPS! Dimenticato di aumentare i
}

Problema 2: condizione sbagliata

A volte lo sviluppatore si scava la fossa da solo: la condizione, al contrario, non è mai vera. Così il ciclo non parte proprio.

int i = 10;
while (i < 5)
{
    Console.WriteLine(i); // Questo codice non verrà mai eseguito.
    i++;
}

Problema 3: errore con i tipi di dato

Nella condizione del ciclo ci deve sempre essere un'espressione booleana — cioè il risultato deve essere true o false.

int number = 5;
while (number) // Errore! Si aspettava un bool, non un int.
{
    number--;
}
2
Compito
C# SELF, livello 4, lezione 1
Bloccato
Stampa dei numeri da 1 a 10
Stampa dei numeri da 1 a 10
2
Compito
C# SELF, livello 4, lezione 1
Bloccato
Somma dei numeri fino a un limite dato
Somma dei numeri fino a un limite dato
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION