Gli operatori utilizzati all'interno di queste espressioni sonno detti operatori relazionali.
Abbiamo già visto l'operatore > "maggiore di", ma elenchiamoli tutti:
< "minore di ... "
<= "minore o uguale a ... "
> "maggiore di ... "
>= "maggiore o uguale a ... "
== "uguale a ... "
!= "diverso da ... "
La prima cosa che salta all'occhio è l'operatore di eguaglianza == ed è giusto spendere qualche parola a riguardo.
Facciamo un esempio per chiarire meglio il suo utilizzo:
int varVita = 100; //assegna il valore 100 a varVitaCi aspetteremmo che per verificare un eguaglianza si usasse un solo simbolo uguale = .
while(varVita == 100) //finché varVita è uguale a 100
{
cout << "HAI IL MASSIMO DELLA VITA!";
}
Tuttavia nel C++ il simbolo uguale svolge un altro compito che conosciamo bene, che è quello di assegnare un valore ad una variabile. Quest'operatore è detto operatore di assegnazione.
Mentre per verificare un eguaglianza si utilizza l'operatore di eguaglianza, che è formato da due simboli di uguale == !
E' facile confondersi, tant'è che succede spesso anche ai programmatori esperti di sbagliarsi e scrivere un singolo = invece di due.
Ipotizziamo che il nostro personaggio è stato colpito, quindi la sua vita è dimezzata.
In teoria non dovrebbe essere mostrata la scritta "HAI IL MASSIMO DELLA VITA", perché la condizione varVita == 100 non si verifica ed il codice all'interno del blocco del ciclo while() non viene eseguito.
int varVita = 50; //il nostro personaggio ha solo 50 punti vitaOvviamente la scritta "HAI IL MASSIMO DELLA VITA" non verrà mai mostrata, perché la condizione varVita == 100 è falsa, in quanto varVita ora è 50, ed il codice all'interno del blocco (l'istruzione cout) non verrà eseguito.
while(varVita == 100) //finché varVita è uguale a 100
{
cout << "HAI IL MASSIMO DELLA VITA!";
}
Vediamo però cosa succede se al posto di == usiamo un singolo = :
int varVita = 50; //il nostro personaggio ha solo 50 punti vitaSe compiliamo ed eseguiamo questo programma vedremo che mostrerà a schermo la scritta "HAI IL MASSIMO DELLA VITA!".
while(varVita = 100) //assegna il valore 100 a varVita
{
cout << "HAI IL MASSIMO DELLA VITA!";
}
Ma come è possibile? Abbiamo detto al ciclo while di eseguire il blocco di codice finché varVita è uguale a 100, ma noi l'abbiamo impostata a 50!
Aspetta un attimo! Dannazione, abbiamo utilizzato l'operatore di assegnazione al posto dell'operatore di eguaglianza!
Questo è un errore di distrazione che capita spesso, perciò se durante la scrittura di un programma qualcosa non funziona, la prima cosa da verificare è che non ci siano errori di questo tipo.
Questo succede perché all'interno delle parentesi tonde del while, invece di verificare una condizione, viene eseguita un'istruzione di assegnamento, e cioé varVita viene impostata a 100, dopodiché il while, non avendo condizioni da verificare, esegue il suo contenuto all'infinito.
Sarebbe un po' come scrivere:
while()Non avendo condizioni da verificare, il ciclo while viene eseguito sempre, e quindi non termina mai.
{
//...codice...
}
L'opposto dell'operatore di eguaglianza è l'operatore di diseguaglianza, che fa sì che il codice all'interno del blocco sia eseguito sinché una variabile è diversa dal valore specificato.
Facciamo un esempio con un minimo di interazione:
char varChar; //variabile necessaria per memorizzare l'input da tastieraIl codice esegue il ciclo while sinché l'utente non preme il tasto x della tastiera.
while(varChar != 'x')
{
cout << "Sei all'interno del ciclo while." << endl;
cout << "Premi il tasto x per uscire dal ciclo." << endl;
cin >> varChar; //attende l'input da tastiera
}
cout << "Hai premuto il tasto x. Sei fuori dal loop."
Provate ad eseguirlo e a premere lettere a caso, e vedrete che il programma continua a stampare il contenuto del blocco ogni volta che premete una lettera diversa da x.
Nel momento in cui premerete il tasto x il ciclo terminerà e verrà eseguita l'espressione successiva, che mostrerà a schermo la frase "Hai premuto il tasto x. Sei fuori dal loop.".
Questo avviene perché l'espressione relazionale dice "esegui il codice all'interno del blocco sinché varChar è diversa dal carattere x".
Come potete vedere l'utilizzo di queste espressioni è molto intuitivo, se avete qualche piccolo dubbio vedrete che andrà via con un po' di pratica.
E' inutile a questo punto descrivere il funzionamento degli altri quattro operatori relazionali, poiché si commentano da soli.
Nessun commento:
Posta un commento