allora in C
il codice sarebbe questo
codice:
#include <stdio.h>
int main()
{
int n = 0;
printf("Inserire un numero intero : ");
scanf("%d", &n);
if (n != (int) n)
{
printf("Numero non intero...\n");
return -1;
}
printf("\n%d\n", n+n);
return 0;
}
inserendo come primo carattere qualsiasi cosa che non sia un numero, scanf non modificherā la variabile n, per cui, essendo n = 0
if (0 != (int) 0)
č falsa e il controllo passera alla riga
printf("\n%d\n", n+n);
un soluzione corretta in C
codice:
#include <stdio.h>
int main()
{
int n = 0, i;
printf("Inserire un numero intero : ");
/* restituisce il numero di argomenti in input assegnati */
i = scanf("%d", &n);
if (i != 1)
{
printf("Numero non intero...\n");
return -1;
}
printf("%d\n", n+n);
return 0;
}
dall'ANSI C
The scanf function returns the number of input items assigned, which can be fewer than provided for, or even zero, in the event of an early matching failure.
inserendo come primo carattere qualsiasi cosa che non sia un numero, scanf restituirā 0, perchč ho specificato che va letto un intero "%d"
mentre se inserisco un numero, scanf restituirā 1
un numero definito in grammatica BNF č
<numero> ::= <cifra> | <cifra> <numero>
<cifra> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9