Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2003
    Messaggi
    323

    [C++]Controllare se è intero o stringa

    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

  2. #2
    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:

    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;
    ...
    PS: Magari esistono funzioni apposite, ma non ne conosco... Ho sempre fatto così...



  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2003
    Messaggi
    323
    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

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

  5. #5
    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();


  6. #6
    Utente bannato
    Registrato dal
    Nov 2003
    Messaggi
    558
    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 è ...

  7. #7
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    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.

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


  9. #9
    Utente di HTML.it L'avatar di cik
    Registrato dal
    Jul 2003
    Messaggi
    449
    strtod
    http://msdn.microsoft.com/library/de...2c_.wcstod.asp

    l'esempio che trovi è cristallino.
    S'i fosse foco, arderei 'l mondo

  10. #10
    Prova così:

    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
    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.
    La luce è più veloce del suono,ecco xchè alcune persone sembrano brillanti fino a quando non parlano


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.