Ciao,
dovrei controllare se l'utente mi passa correttamente un numero o per sbaglio inserisce una stringa.
Come posso fare?
Esiste una funzione del tipo is_int(n)?
Grazie
Ciao,
dovrei controllare se l'utente mi passa correttamente un numero o per sbaglio inserisce una stringa.
Come posso fare?
Esiste una funzione del tipo is_int(n)?
Grazie
someone told me
love would all save us
but how can that be
look what love gave us
Come prima cosa il valore che leggi devi metterlo in una stringa: se lo metti in una variabile di tipo numerico non otterrai l'effetto desiderato...
Quindi per vedere se è un numero puoi usare una funzione che te lo converte in numero (ad esempio la atoi per gli interi o la atod per i double)... Quindi guardi la variabile ottenuta se esiste:
PS: Magari esistono funzioni apposite, ma non ne conosco... Ho sempre fatto così...codice:... int x; char y[15] cin >> y; // leggi la stringa x = atoi(y); if ( x || y[0] == '0') cout << "E' un numero e vale: " << x; ...
Non va bene così... ci devo fare un'operazione matematica su questo numero....
someone told me
love would all save us
but how can that be
look what love gave us
Già... Ora che mi ci fai pensare, questo è un metodo non molto corretto: se inserisci ad esempio "6fhdh6h54hg32" leggi che è stato inserito il numero 6...
Se non ti va bene puoi farti una funzione che controlla lettera per lettera:
codice:int isint ( char * x ) { while (*x) { if ( ! ( *x >= '0' && *x <= '9' ) ) return 0; x++; } return 1; }
Anche se fai come nel mio primo esempio le operazioni matematiche ce le puoi fare...Originariamente inviato da stoppy
Non va bene così... ci devo fare un'operazione matematica su questo numero....
la variabile x contiene il numero inserito come intero... L'unico inconveniente è che se scrive "465ggg" leggi 465... Io facevo comunque così e me ne sbattevo... Se non ti va bene usa il secondo metodo...
Devi leggere il numero come stringa, quindi inviarlo a quella funzione e, se restituisce true, trasformare quella stringa in intero con la funzione atoi();
Ma perchè complicarvi la vita??
In <ctype.h> c'è la funzione isalpha () che restituisce 1 se il parametro passatogli è un carattere,0 se non lo è ...
Ma isalpha vuole un int, e restituisce 1 se quell'intero identifica un carattere alfabetico, zero altrimenti, non gli serve a nulla.Originariamente inviato da Lardoman
Ma perchè complicarvi la vita??
In <ctype.h> c'è la funzione isalpha () che restituisce 1 se il parametro passatogli è un carattere,0 se non lo è ...
...Che c'entra? :master:Originariamente inviato da Lardoman
Ma perchè complicarvi la vita??
In <ctype.h> c'è la funzione isalpha () che restituisce 1 se il parametro passatogli è un carattere,0 se non lo è ...
Comunque anche facendo così servirebbe un bel ciclo, che scorre tutte le lettere della strina e le guarda una per una se sono interi... E a quel punto si complica meno la vita con i due metodi che gli ho suggerito
L'unica sarebbe una funzione già fatta che prende una stringa e dice se è convertibile in intero o meno... Ma non so se esiste, e di sicuro non la conosco.
strtod
http://msdn.microsoft.com/library/de...2c_.wcstod.asp
l'esempio che trovi è cristallino.
S'i fosse foco, arderei 'l mondo
Prova così:
Mi sa che l'unico inconveniente è che non riconosce il numero 0 come numero. Se non devi fare operazioni con lo zero può andar bene altrimenti si deve adattare.codice:bool IsANumber = true; int i = 0; while (i<strlen(str)) && IsANumber) { if(!isdigit(str[i])) IsANumber = false; i++; } if(IsANumber) // Fai le tue operazioni else // Non è un numero
La luce è più veloce del suono,ecco xchè alcune persone sembrano brillanti fino a quando non parlano