C non si limita a eseguire il codice in modo lineare. Fa delle scelte. Al centro di ogni decisione presa da un programma C si trova l’espressione booleana. Sia che tu stia utilizzando un’istruzione “if” o un ciclo ” while”, la logica si riduce a una cosa: questa condizione è vera o falsa?
Diamo un’occhiata a un esempio di base.
Qui il programma richiede input. Memorizza quel numero nella variabile “b”. Quindi controlla una condizione. L’espressione booleana in questione è (b < 0). C lo valuta. Se il risultato è vero, il programma stampa "Il valore è negativo". Se è falso, il programma non fa nulla. Resta in silenzio.
La regola è semplice. Se l'espressione restituisce True, C esegue la riga singola immediatamente successiva a "if". Oppure, se usi le parentesi graffe {}, esegue l'intero blocco al suo interno. Se l'espressione è False, C salta interamente la riga o il blocco.
Ma i programmi raramente si occupano di un solo risultato. Spesso è necessario gestire anche numeri zero o positivi.
Questa struttura utilizza "else if" e "else" per coprire i restanti casi. Successivamente verifica lo zero. Se fallisce, presuppone che il valore sia positivo.
A volte le decisioni diventano complicate. Potrebbe essere necessario verificare più condizioni contemporaneamente.
Questa affermazione si legge come un linguaggio naturale. Se "x" è uguale a "y" E "j" è maggiore di "k", imposta "z" su 1. Altrimenti, imposta "q" su 10. Utilizzerai questo tipo di istruzioni durante tutta la tua carriera in C. La maggior parte delle decisioni saranno semplici. Occasionalmente diventeranno complessi.
Prestare molta attenzione alla sintassi. Una trappola comune per i principianti è confondere l'assegnazione con il confronto.
C utilizza == per testare l'uguaglianza.
C usa = per assegnare un valore a una variabile.
Mescolarli causa bug difficili da trovare. Si imposta un valore. L'altro controlla una condizione. Non sono intercambiabili.
Il C si basa anche su operatori specifici per le operazioni logiche. Il simbolo && rappresenta un'operazione booleana AND. Garantisce che entrambi i lati della condizione siano veri.
Ecco un rapido riferimento per tutti gli operatori booleani in C:
- == : uguaglianza
- != : disuguaglianza
- < : inferiore a
- > : maggiore di
- <= : minore o uguale a
- >= : maggiore di

Logica di loop in C: while, do- while e for
Usare un ciclo ** while** è semplice. Rispecchia la semplicità di un'istruzione if standard. Considera questo frammento:
while (a < b) { printf("%d\n", a); a = a + 1; }
Questa struttura esegue ripetutamente le due righe all'interno delle parentesi graffe. Si ferma solo quando a è maggiore o uguale a b. La logica è lineare. Controlla le condizioni. Esegui corpo. Ripetere.
C offre anche un costrutto fai-mentre. A differenza del ciclo while standard, questo controlla la condizione dopo la prima esecuzione. Ciò garantisce che il blocco di codice venga eseguito almeno una volta.
Nota: l'esempio precedente utilizza un'istruzione if all'interno della funzione. Un vero lavoro da fare avvolgerebbe il corpo e ne controllerà le condizioni alla fine.
Il ciclo for come abbreviazione
Il ciclo for è essenzialmente un'istruzione mentre compressa. Raggruppa inizializzazione, test e incremento in un'unica riga.
Guarda questo ciclo while standard:
x=1;
mentre (x<10) {
bla bla bla
x++; // x++ è identico a x=x+1
}
Puoi riscriverlo come un ciclo for:
for(x=1; x<10; x++) { bla bla bla }
I componenti sono chiari. x=1 inizializza. x<10 test. x++ incrementi. Il ciclo for li condensa semplicemente. Non sei limitato a variabili semplici. Puoi inserire una logica complessa in quegli slot.
Prendi questo esempio:
a=1;
b=6;
mentre (a < b) {
a++;
printf("%d\n",a);
}
Diventa:
for (a=1,b=6; a < b; a++,printf("%d\n",a));
Funziona. È anche fonte di confusione. L'operatore virgola consente più istruzioni nelle sezioni di inizializzazione e incremento. Non funziona nella sezione test. Molti sviluppatori C adorano questa compattezza. Altri lo trovano illeggibile. Lo distruggono. Entrambi gli approcci sono validi. Scegli in base a chi manterrà il codice in seguito.
Il pericolo di = vs. == in C
L'operatore == provoca mal di testa. Gli sviluppatori digitano spesso un singolo = per errore nelle espressioni booleane. Il compilatore accetta entrambi. Il comportamento è molto diverso.
In C, le espressioni booleane vengono valutate come numeri interi. Lo zero è falso. Qualsiasi numero intero diverso da zero è vero. Ciò significa che qualsiasi numero intero può esistere all'interno di un contesto booleano.
Considera questo codice C legale:
if (a) { printf("Diverso da zero"); }
Se a è tutt'altro che 0, il blocco viene eseguito.
Ora guarda se (a=b). Questo non confronta i valori. Assegna b a a, quindi verifica il nuovo valore di a. Se b è 0, la condizione è Falsa. Se b è qualcos'altro, è vero. La variabile a cambia. Probabilmente non è quello che volevi. Probabilmente intendevi == per confronto.
Questa funzionalità non è inutile. Ha casi d'uso validi. Ma è una trappola. Fai attenzione all'utilizzo di = e ==. Un personaggio cambia logica dal confronto all'assegnazione.

































