IDENTIFIER = EXPRESSIONè un'espressione la cui valutazione cambia anche il contenuto di IDENTIFIER assegnandogli il valore di EXPRESSION; il valore di questa espressione è il valore finale di IDENTIFIER.
Un'espressione come sopra diventa uno statement se è seguita dal punto e virgola.
Per esempio, il seguente programma
#include <stdio.h> main(){ int x = 9, y = 8 ; y = ( x = 5 ) + 3 ; printf("x = %d e y = %d.\n",x,y); y = ( x == 5 ) + 3 ; printf("x = %d e y = %d.\n",x,y); }produrrà il seguente output
x = 5 e y = 8. x = 5 e y = 4.Utilizzare questo costrutto con attenzione, poichè è molto facile fare errori (la seconda parte del programma sopra potrebbe benissimo essere il risultato di aver scritto = invece di ==).
ESEMPIO
#include <stdio.h> int E_Cifra(char c); /*controlla se un carattre e' una cifra decimale*/ int ReadInt(void); /*legge un numero intero scritto nel formato segno sequenza di cifre */ main(){ int num, somma = 0 ; while((num = ReadInt()) >= 0) somma = somma + num; printf("La somma e\' %d .\n",somma); } int E_Cifra(char c) { return (c >= '0') && (c <= '9'); } int ReadInt(void) { char segno, cif; int num = 0; scanf("%c",&segno); if((segno == '+') || (segno == '-')){ scanf("%c",&cif); while(E_Cifra(cif)){ num = (num * 10) + (cif - '0'); scanf("%c",&cif); }; return((segno =='+') ? num : -num); } else { printf("ERRORE\n"); return -1; } }Questo programma può anche essere scritto con costrutti più standard modificando il suo main come segue
main(){ int num, somma = 0 ; num = ReadInt(); while(num >= 0){ somma = somma + num; num = ReadInt(); }; printf("La somma e\' %d .\n",somma); }
ESERCIZIO