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