Ciclo while
A cosa serve il ciclo while?
Section titled “A cosa serve il ciclo while?”A volte non sai in anticipo quante volte dovrai ripetere qualcosa. Per esempio: continua a chiedere all’utente un numero finché non inserisce uno valido. Oppure: elabora dati finché non hai finito la lista.
Il ciclo while ripete un blocco di codice finché una condizione rimane vera. Si ferma solo quando la condizione diventa falsa.
La struttura del ciclo while
Section titled “La struttura del ciclo while”while (condizione) { // codice da ripetere}Un esempio concreto:
int i = 1;
while (i <= 5) { cout << i << endl; i++; // aumentiamo i di 1 ad ogni giro}Output:
12345Come funziona, passo per passo:
- Controlla la condizione
i <= 5 - Se è vera, esegue il blocco
- Torna al punto 1
- Quando la condizione è falsa, si ferma
Il contatore: non dimenticarlo!
Section titled “Il contatore: non dimenticarlo!”Di solito si usa una variabile contatore per tenere traccia dei giri. Devi:
- Inizializzarla prima del ciclo
- Aggiornarla dentro il ciclo
int contatore = 0;
while (contatore < 3) { cout << "Esecuzione " << contatore + 1 << endl; contatore++; // senza questa riga: ciclo infinito!}Il ciclo infinito: cosa evitare
Section titled “Il ciclo infinito: cosa evitare”Se la condizione non diventa mai falsa, il ciclo gira per sempre. Il programma si blocca:
// ATTENZIONE: questo è un ciclo infinito!int i = 1;while (i <= 5) { cout << i << endl; // manca i++ — i rimane sempre 1, la condizione non cambia mai}Se ti capita, puoi fermare il programma premendo Ctrl+C nel terminale.
Quando il while è più adatto del for
Section titled “Quando il while è più adatto del for”Il while eccelle quando non sai in anticipo quante ripetizioni ci saranno. Per esempio, continuare a leggere input finché l’utente non decide di uscire:
int numero;cout << "Inserisci un numero (0 per uscire): ";cin >> numero;
while (numero != 0) { // calcoliamo il quadrato del numero inserito cout << "Il quadrato di " << numero << " è " << numero * numero << endl;
cout << "Inserisci un numero (0 per uscire): "; cin >> numero;}
cout << "Arrivederci!" << endl;Ciclo con accumulatore
Section titled “Ciclo con accumulatore”Un pattern molto comune: sommare o raccogliere valori uno per uno:
int somma = 0; // accumulatore — parte da zeroint numero;int n = 5; // quanti numeri vogliamo leggere
cout << "Inserisci " << n << " numeri:" << endl;
int i = 0;while (i < n) { cout << "Numero " << (i + 1) << ": "; cin >> numero; somma += numero; // aggiungiamo il numero alla somma totale i++;}
cout << "Somma: " << somma << endl;cout << "Media: " << (double)somma / n << endl;Condizioni complesse
Section titled “Condizioni complesse”Puoi combinare più condizioni con && e ||:
int tentativi = 0;int password;const int PASSWORD_CORRETTA = 1234;
// Continua finché la password è sbagliata E i tentativi sono meno di 3while (password != PASSWORD_CORRETTA && tentativi < 3) { cout << "Inserisci la password: "; cin >> password; tentativi++;
if (password != PASSWORD_CORRETTA) { cout << "Password errata. Tentativi rimasti: " << (3 - tentativi) << endl; }}
if (password == PASSWORD_CORRETTA) { cout << "Accesso consentito!" << endl;} else { cout << "Accesso bloccato dopo 3 tentativi." << endl;}Esempio pratico: calcolatrice interattiva
Section titled “Esempio pratico: calcolatrice interattiva”#include <iostream>using namespace std;
int main() { char continua = 's';
// Continuiamo finché l'utente vuole fare calcoli while (continua == 's' || continua == 'S') { double a, b; char operazione;
cout << "Inserisci il primo numero: "; cin >> a; cout << "Operazione (+, -, *, /): "; cin >> operazione; cout << "Inserisci il secondo numero: "; cin >> b;
if (operazione == '+') { cout << "Risultato: " << a + b << endl; } else if (operazione == '-') { cout << "Risultato: " << a - b << endl; } else if (operazione == '*') { cout << "Risultato: " << a * b << endl; } else if (operazione == '/') { if (b != 0) { cout << "Risultato: " << a / b << endl; } else { cout << "Errore: divisione per zero!" << endl; } }
cout << "Vuoi continuare? (s/n): "; cin >> continua; }
cout << "Ciao!" << endl; return 0;}