# C/Blocchi e funzioni/Blocchi if e switch

C
Copertina Tutti i moduli · Sviluppo
* LinguaggioC/Linguaggio
** PanoramicaC/Linguaggio/Panoramica
** Struttura del linguaggioC/Linguaggio/Struttura del linguaggio
* Variabili, operatori e costantiC/Variabili, operatori e costanti
** VariabiliC/Variabili, operatori e costanti/Variabili
** Operatori aritmeticiC/Variabili, operatori e costanti/Operatori aritmetici
** Operatori sui bitC/Variabili, operatori e costanti/Operatori sui bit
** CostantiC/Variabili, operatori e costanti/Costanti
* Blocchi e funzioniC/Blocchi e funzioni
** Blocchi if e switchC/Blocchi e funzioni/Blocchi if e switch
** Operatori logiciC/Blocchi e funzioni/Operatori logici
** CicliC/Blocchi e funzioni/Cicli
** FunzioniC/Blocchi e funzioni/Funzioni
** mainC/Blocchi e funzioni/main
** LibrerieC/Blocchi e funzioni/Librerie
** RicorsivitàC/Blocchi e funzioni/Ricorsività
* Vettori e puntatoriC/Vettori e puntatori
** VettoriC/Vettori e puntatori/Vettori
** PuntatoriC/Vettori e puntatori/Puntatori
** Interscambiabilità tra puntatori e vettoriC/Vettori e puntatori/Interscambiabilità tra puntatori e vettori
* StringheC/Variabili, operatori e costanti/Stringhe
* Enumerazioni, strutture e unioniC/Enumerazioni, strutture e unioni
** EnumerazioniC/Enumerazioni, strutture e unioni/Enumerazioni
** StruttureC/Enumerazioni, strutture e unioni/Strutture
** UnioniC/Enumerazioni, strutture e unioni/Unioni
* Conversioni di tipoC/Conversioni di tipo
* Lettura e scrittura su fileC/Lettura e scrittura su file
** File di TestoC/Lettura e scrittura su file/File di Testo
** File BinariC/Lettura e scrittura su file/File Binari
* Compilatore e precompilatoreC/Compilatore e precompilatore
** CompilatoreC/Compilatore e precompilatore/Compilatore
** DirettiveC/Compilatore e precompilatore/Direttive
** HeaderC/Compilatore e precompilatore/Header
* VisibilitàC/Visibilità
* Gestione della memoriaC/Gestione della memoria
* Le applicazioni CGIC/Le applicazioni CGI
* Appendice
** Librerie standardC/Appendice/Librerie standard
*** assert.hC/Appendice/Librerie standard/assert.h
*** ctype.hC/Appendice/Librerie standard/ctype.h
*** errno.hC/Appendice/Librerie standard/errno.h
*** float.hC/Appendice/Librerie standard/float.h
*** limits.hC/Appendice/Librerie standard/limits.h
*** locale.hC/Appendice/Librerie standard/locale.h
*** math.hC/Appendice/Librerie standard/math.h
*** setjmp.hC/Appendice/Librerie standard/setjmp.h
*** signal.hC/Appendice/Librerie standard/signal.h
*** stdarg.hC/Appendice/Librerie standard/stdarg.h
*** stddef.hC/Appendice/Librerie standard/stddef.h
*** stdio.hC/Appendice/Librerie standard/stdio.h
*** stdlib.hC/Appendice/Librerie standard/stdlib.h
*** string.hC/Appendice/Librerie standard/string.h
*** time.hC/Appendice/Librerie standard/time.h
** StrumentiC/Appendice/Strumenti
*** InstallerC/Appendice/Strumenti/Installer
** Librerie esterneC/Appendice/Librerie esterne
* Bibliografia
    IndiceC/Indice
Modifica il sommario
I blocchi if e switch sono detti di selezione perché "selezionano" le opzioni a seconda di una condizione.

## Verità e falsità in C

Prima di poter usare blocchi if e switch è bene sapere che cosa intende il C per vero o falso.
* Un'espressione in C è ritenuta falsa se il suo valore è uguale allo zero binario, vera se il suo valore è diverso dallo zero binario.
* Gli operatori logici (==, !=, <, <=, >, >=) rendono uno se l'espressione è logicamente vera, e zero se l'espressione è logicamente falsa.
* Più in generale, qualsiasi istruzione C (assegnazione di variabile/operazione logica/operazione matematica) restituisce sempre un risultato e può quindi essere valutata in termini di vero/falso. Ad esempio, l'istruzione di assegnazione a=3; è vera (il valore restituito è 3) mentre b=0; è falsa (il valore restituito è 0).

## Blocco if

Il blocco if esegue un'azione se la condizione specificata tra parentesi è vera.

### Blocco if semplice

Questa istruzione esegue semplicemente un'istruzione se l'espressione specificata è vera. L'espressione va sempre racchiusa tra parentesi.

#### Sintassi

oppure, se si desiderano eseguire più istruzioni, le si racchiude in un blocco.

#### Esempi d'uso
### Blocco if-else

Se la condizione è vera, si eseguono le istruzioni specificate dall'if; se è falsa quelle specificate dal blocco else.

#### Esempi d'uso
### Blocco if-else if-else

Se la condizione specificata nell'if è vera, si eseguono le istruzioni specificate dall'if, altrimenti se è vera una delle condizioni specificate in un else if si eseguono le istruzioni specificate dall'else if. Se nessuna delle espressioni è vera, si eseguono le istruzioni specificate dall'else.

#### Esempi d'uso
## L'operatore '?'

Il blocco if-else può essere sostituito dall'operatore ?. Per esempio:
Questo è equivalente al secondo esempio (eccetto per i printf). Un altro possibile uso è un'assegnazione condizionale:
che equivale a:

## Blocco switch-case

Il blocco switch-case permette di selezionare un'istruzione da eseguire in base ad una variabile.

### Blocco switch-case semplice

Questo blocco seleziona semplicemente un'istruzione tra le proposte in base ad una variabile. L'istruzione break interrompe l'elaborazione del blocco switch, in modo da uscire subito dal blocco se una condizione è vera. L'istruzione break è opzionale, ma se non viene usata, vengono eseguite le istruzioni dei casi seguenti.

#### Esempi d'uso

Dopo l'ultimo caso, l'istruzione "break" è inutile, ma è meglio inserirla ugualmente per evitare errori nel caso si aggiungessero altri casi.
Quasi sempre, prima di una parola-chiave "case", c'è:
* Un altro "case".
* Un'istruzione "break" o "return" o "continue" o "goto" (che non è molto consigliato), che fa uscire dal blocco "switch".
Nei casi, come quello dell'esempio precedente, in cui non fosse così, è bene segnalare la situazione con un commento.
In questo esempio le istruzioni vengono eseguite se myVar è uguale a 1 o a 2.

### Istruzione switch-case-default

Come la precedente, solo che se non si avvera nessuna delle condizioni, viene eseguita l'istruzione specificata dal caso default.