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
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
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..
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?
Vuol sapere come poter capire se da stdin sia stato effettivamente inserito un numero oppure no.
Non e' che hai chiarito molto i miei dubbi ...![]()
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 ...
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...
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:
codice:#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; }
Non esiste una funzione semplice semplice, tipo un IsNaN, che possa verificare solo se "pippo" è un intero, oppure no?
pippo e' un *intero* perche' puo' contenere solamente un intero ... non puo' contenere altro ...
Quindi, cosa dovrebbe controllare la funzione?
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.
Amaro C++, il gusto pieno dell'undefined behavior.