Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    30

    [C++] Gestione dello Standard Input

    Ho questo pezzo codice:
    codice:
    do{
        cin >> n;
        if(n<2){
            cerr << "Errore";
        }
    }while(n<2);
    Vorrei sapere come gestire i dati provenienti dallo Standard Input. Ad esempio, se venisse inserita una lettera ci sarebbe un errore dato che la variabile è intera, ed io vorrei sapere come gestire questo errore. Grazie a chi interverrà.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    30
    Ho modificato in questo modo:
    codice:
    do{
        cin >> n;
        if(n<2){
            cerr << "Errore";
        }
        if(!isdigit(n)){
            cerr << "Errore";
        }
    }while(n<2 || !isdigit(n));
    Nonostante tutto continua a non funzionare.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma nel documento che ti ho linkato non si parlava della

    cin.fail()

    ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    isdigit() controlla che un singolo carattere sia un numero.
    Quindi 'a' non viene considerato un numero.
    Non ho capito di che tipo hai dichiarato n, se ad esempio n vale 1234, ed è un int, viene controllato solo il primo byte.E c'è un overflow numerico, "1234" è un insieme di caratteri non un singolo carattere."1234" come stringa è diversa da 1234 come numero.
    Io il tuo problema l' avrei risolto così:

    codice:
    #include <iostream>
    #include <cstdlib>
    
    using namespace std;
    
    int main(int argc, char** argv)
    {
        string n;
        do
        {
            cin >> n;
            // Eventualmente stampa l' errore
        }while(atoi(&n[0])<2);
        return 0;
    }

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    30
    Who am I, si la mia variabile è un int, non l'ho scritto esplicitamente perché pensavo si capisse dalla condizione del do...while. Cmq ringrazio te ed oregon per essere intervenuti ma sono riuscito a risolvere da solo. Questa è la modifica che ho fatto, così funziona:
    codice:
    do{
        cin >> n;
        if(cin.fail()){
            cin.clear();
            cout << "Non hai inserito un numero, riprova: ";
            cin.ignore();
        }
        else{
            if(n<2){
                cerr << "Errore, riprova: ";
    	}
        }
    }while(n<2);

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Esatto ... utilizzando le caratteristiche della cin ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.