PDA

Visualizza la versione completa : [C] Verificare se una variabile numerica


natasha
07-11-2006, 11:06
Buongiorno a tutti,
ho scritto un programma in C che legge un numero da STDIN con scanf:

scanf("%d", &pippo);

Come posso verificare che "pippo" sia un intero, e se non lo , restituire un messaggio di errore?
Kisses,

Nat

Il Pazzo
07-11-2006, 11:28
Se vuoi sapere se un numero non ti so dire se c' qualche funzione... forse devi fare un controllo ogni volta che premi un tasto..

oregon
07-11-2006, 12:15
Chiarisci il problema ...

pippo e' una variabile di tipo int, quindi e' un intero senza dubbi ...

Forse che l'input sia un numero piuttosto che delle lettere ... o cos'altro?

Ed_Bunker
07-11-2006, 12:40
Vuol sapere come poter capire se da stdin sia stato effettivamente inserito un numero oppure no.

oregon
07-11-2006, 13:00
Non e' che hai chiarito molto i miei dubbi ... :madai!?:

Comunque, per rimanere sul generale, con la scanf non puoi fare nessun controllo del genere.

I caratteri alfabetici vengono ignorati e il valore della variabile rimane quello precedente.

Il fatto e' che la domanda e' troppo generica ... magari "calata" nel programma specifico che sta sviluppando, si puo' dare maggiori indicazioni ...

Il Pazzo
07-11-2006, 13:05
Se vuoi controllare che in quello che inserisci non ci siano lettere o segni particolari
magari puoi fare l'inserimento in un vettore di caratteri con il getch in un ciclo... ad ogni inserimento controlli se una cifra (attraverso il codice ASCII)... alla fine converti il tutto in un valore numerico intero attraverso la funzione "atoi"...

Sempre che non ci sia gi una funzione specifica che gi fa i il tutto... ma non penso...

zero85
07-11-2006, 14:31
Come gi detto da oregon con la scanf e usando come tipo del parametro un integero la parte non decimale e/o non numerica viene automaticamente ignorata.

puoi forzare il controllo con una cosa simile ma non detto che si adatti al tuo caso dovresti mostrare pi codice in modo da scegliere l'opzione migliore:


#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h>

bool isInteger(const char* c)
{
int i = 0;
if(c[0] == '-') {
i = 1;
}
for(i; i < strlen(c); i++){
if(!isdigit(c[i]))
return false;
}
return true;
}

int main(int argc, char **argv)
{
char *numero;
numero = (char*)malloc(32);
do {
printf("Inserisci un numero intero\n");
scanf("%s",numero);
}
while(!isInteger(numero));
int n = atoi(numero);
printf("Numero intero: %i\n",n);
system("pause");
return 0;
}

natasha
07-11-2006, 15:15
Non esiste una funzione semplice semplice, tipo un IsNaN, che possa verificare solo se "pippo" un intero, oppure no?

oregon
07-11-2006, 16:53
pippo e' un *intero* perche' puo' contenere solamente un intero ... non puo' contenere altro ...

Quindi, cosa dovrebbe controllare la funzione?

MItaly
07-11-2006, 17:01
Se vuoi verificare che la scanf sia riuscita a convertire il testo digitato dall'utente in numero (memorizzandolo in pippo) basta verificare il valore restituito: se 0 allora l'utente non ha inserito nulla che potesse essere convertito in numero.

Loading