Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it L'avatar di natasha
    Registrato dal
    Sep 2000
    Messaggi
    1,307

    Come verificare in C se una variabile è un numero

    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

  2. #2
    Utente di HTML.it L'avatar di Il Pazzo
    Registrato dal
    Jul 2004
    Messaggi
    1,071
    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..

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    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?

  4. #4
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119
    Vuol sapere come poter capire se da stdin sia stato effettivamente inserito un numero oppure no.

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    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 ...

  6. #6
    Utente di HTML.it L'avatar di Il Pazzo
    Registrato dal
    Jul 2004
    Messaggi
    1,071
    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...

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

  8. #8
    Utente di HTML.it L'avatar di natasha
    Registrato dal
    Sep 2000
    Messaggi
    1,307
    Non esiste una funzione semplice semplice, tipo un IsNaN, che possa verificare solo se "pippo" è un intero, oppure no?

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    pippo e' un *intero* perche' puo' contenere solamente un intero ... non puo' contenere altro ...

    Quindi, cosa dovrebbe controllare la funzione?

  10. #10
    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.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.