PDA

Visualizza la versione completa : [C++]Controllare se intero o stringa


stoppy
19-05-2004, 19:37
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

GNAWS
19-05-2004, 19:52
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:


...
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;
...

PS: Magari esistono funzioni apposite, ma non ne conosco... Ho sempre fatto cos...


:ciauz:

stoppy
19-05-2004, 19:55
Non va bene cos... ci devo fare un'operazione matematica su questo numero....

GNAWS
19-05-2004, 19:57
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:


int isint ( char * x ) {
while (*x) {
if ( ! ( *x >= '0' && *x <= '9' ) )
return 0;
x++;
}
return 1;
}

:ciauz:

GNAWS
19-05-2004, 19:59
Originariamente inviato da stoppy
Non va bene cos... ci devo fare un'operazione matematica su questo numero.... Anche se fai come nel mio primo esempio le operazioni matematiche ce le puoi fare...
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();

:ciauz:

Lardoman
19-05-2004, 20:05
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 ...

anx721
19-05-2004, 20:28
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 ...

Ma isalpha vuole un int, e restituisce 1 se quell'intero identifica un carattere alfabetico, zero altrimenti, non gli serve a nulla.

GNAWS
19-05-2004, 20:45
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:

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 :ciapet: ;)
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.

:ciauz:

cik
20-05-2004, 11:48
strtod
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_strtod.2c_.wcstod.asp

l'esempio che trovi cristallino.

m@ximo
20-05-2004, 12:55
Prova cos:



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


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.

Loading