Sullo scanf c'è qualcos'altro da dire...
dopo l'esempio di Cyan, a qualcuno potrebbe venire in mente di dire, allora metto un ciclo che continua a chiedere all'utente l'input finchè non lo scrive giusto, una cosa tipo:
C Programming
int ret=0;
float value=0;
while (!ret)
{
ret=scanf("%f",&value);
}
sorpresa! non funziona... perchè ? perchè scanf ha un comportamento subdolo quando gli diamo in input qualcosa che non interpreta nel modo giusto.
Diciamo che invece di scrivere in input un "10.5" scriviamo "A" e diamo invio.
Scanf ci restituisce 0, quindi il ciclo torna a eseguire scanf, ma il carattere A è ancora nel buffer dello STDIN! quindi rivà in errore e torna ad eseguire scanf all'infinito! senza chiedere piu l'input all'utente.
Qualcuno per ovviare a questi problemi preferisce un approccio diverso, ovvero leggere l'input in una stringa e poi eseguire sscanf sull stringa per ottenere lo stesso comportamento.
Però essendo l'input in una stringa ci è piu facile maneggiare la stringa per correggere eventuali errori oppure limitarci ad azzerarla per richiedere un nuovo input, magari senza l'errore sta volta.
Un esempio di codice potrebbe essere questo:
C Programming
#include <stdio.h>
int main()
{
int read=0;
char buffer[256];
float value;
while (!read)
if (fgets(buffer, sizeof(buffer), stdin))
{
if (read=sscanf(buffer, "%f", &value))
{
} else
{
buffer[0]=0;
}
}
}