PDA

View Full Version : [c/c++]: Una funzione per controllare i float in input!


zanardi84
19-01-2011, 16:10
Rieccomi, nuova puntata dei miei esperimenti.
Stavolta sono alle prese con una funzione in grado di controllare l'input da tastiera.
Tempo fa avevo implementato una funzione ben funzionante per controllare i numeri interi. Funzionava così:
passandole uno string scansionava alla ricerca di caratteri che fossero diversi dalle lettere sfruttando isdigit. Se risultava un carattere diverso da una lettera tornava l'errore.
Il limite era rappresentato dall'accettabilità di soli valori interi perchè il punto o la virgola sono caratteri diversi dalle lettere.

Avete qualche idea da suggerirmi?
Per esempio: se digito 2sdfv4345,3 deve dirmi che è errore, mentre se digito 2,3 o 2.3 deve darmi un numero che, se venisse moltiplicato per 2, darebbe 4.6. Poi deciderei se tenere il punto o la virgola.

Grazie.

tomminno
19-01-2011, 17:35
string floatValue;
//Acquisisci da tastiera
std::stringstream stream(floatValue);
float x;
if (!(stream >> x))
throw runtime_error("Impossibile convertire " + floatValue + " in un float");


Poi potresti entrare nel ginepraio delle lingue in quanto di default il float lo prende con il '.' per cui dovresti usare il metodo imbue di stringstream prima di estrarre il valore nel float di destinazione e impostare il locale corretto per la cultura desiderata.