La scanf non è indicata per questo tipo di controllo. Può tuttavia controllare delle stringhe anche se a mio avviso è abbastanza insicura come soluzione in quanto rimane sporco il buffer nella parte incorretta.btw giyf
Il modo migliore per affrontare il problema è usare un buffer di char letto da una fgets e fare i relativi controlli di validità e poi filtrare il tutto attraverso una sscanf. Ti allego un pezzo di codice chiarificatore estratto e leggermente modificato da
#include <stdio.h>
#include <string.h>
int getvalue (char *format,void *value)
{
static char *values=" .+-0123456789";
int ExitCode=0,len=0;
#define MAXSIZE 64
char s[MAXSIZE];
if (fgets (s,MAXSIZE,stdin))
len=strlen(s)-1;
for (--len;!ExitCode && len>=0 ;len--)
if (!strchr (values,s[len]))
ExitCode=1;
if (!ExitCode)
sscanf (s,format,value);
return ExitCode;
}
int main ()
{
int result;
float x;
printf("Inserire il valore iniziale: ");
while (1)
{
result=getvalue ("%g",&x);
printf ("result is %s x=%g\n",(!result)?"OK":"ERROR",x);
}
return 0;
}