Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [C++] Niubbo di C++ chiede aiuto

    Ciao a tutti!
    Ho appena iniziato a programmare in C++ su Linux e già mi sorgono i primi dubbi...
    Semplicemente, ho scritto un programma la cui parte incriminata è riassumibile in queste semplici linee di codice:

    codice:
    #include <iostream>
    using namespace std;
    
    main()
    {
    while (1)
    {
    int variabile;
    cout << "Inserisci un numero: ";
    cin >> variabile;
    cout << "Hai scritto " << variabile << endl;
    }
    }
    Ecco il risultato dell'esecuzione:

    codice:
    vlad@vladweider:~$ ./esempio-semplice
    Inserisci un numero: 6
    Hai scritto 6
    Inserisci un numero: 16
    Hai scritto 16
    Inserisci un numero: 87
    Hai scritto 87
    Inserisci un numero: 36
    Hai scritto 36
    Inserisci un numero: 98
    Hai scritto 98
    Inserisci un numero: 468
    Hai scritto 468
    Inserisci un numero: ciao
    Inserisci un numero: Hai scritto 468
    Inserisci un numero: Hai scritto 468
    Inserisci un numero: Hai scritto 468
    Inserisci un numero: Hai scritto 468
    Inserisci un numero: Hai scritto 468
    Inserisci un numero: Hai scritto 468
    Inserisci un numero: Hai scritto 468
    Inserisci un numero: Hai scritto 468
    Inserisci un numero: Hai scritto 468
    Inserisci un numero: Hai scritto 468
    Inserisci un numero: Hai scritto 468
    Inserisci un numero: Hai scritto 468
    Inserisci un numero: Hai scritto 468
    Inserisci un numero: Hai scritto 468
    Inserisci un numero: Hai scritto 468
    Inserisci un numero: Hai scritto 468
    Inserisci un numero: Hai scritto 468
    Inserisci un numero: Hai scritto 468
    Inserisci un numero: Hai scritto 468
    Inserisci un numero: Hai scritto 468
    Inserisci un numero: Hai scritto 468
    Inserisci un numero: Hai scritto 468
    Inserisci un numero: Hai scritto 468
    Inserisci un numero: Hai scritto 468
    Inserisci un numero: Hai scritto 468
    Inserisci un numero: Hai scritto 468
    Inserisci un numero: Hai scritto 468
    Inserisci un numero: Hai scritto 468
    Inserisci un numero: Hai scritto 468
    Inserisci un numero: Hai scritto 468
    Inserisci un numero: Hai scritto 468
    Inserisci un numero: Hai scritto 468
    Inserisci un numero: Hai scritto 468
    Inserisci un numero: Hai scritto 468
    Inserisci un numero: Hai scritto 468
    E continua a scrivermi "Inserisci un numero: Hai scritto 468" fino a quando non premo CTRL+C.
    Questo potrebbe essere evitato inserendo un if che lo fa uscire dal programma nel caso in cui la variabile abbia qualcosa di strano (tipo: sia maggiore di 999999 o qualcosa del genere).
    Il fatto è che io non devo uscire dal programma: vorrei semplicemente che il valore inserito venisse ignorato e ne venisse richiesto un altro.
    Insomma, come posso fare in modo che il programma non crashi o esca quando in un int viene messo qualcosa di diverso da un numero intero??
    Ciao a tutti e grazie per la collaborazione

  2. #2
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Ti ringrazio per il link, ma modificando il codice in questo modo:
    codice:
    #include <iostream>
    using namespace std;
    
    main()
    {
    while (1)
    {
    int variabile;
    cout << "Inserisci un numero: ";
    cin >> variabile;
    if (cin.fail())
    {
    cout << "Hai sbagliato a scrivere" << endl;
    cin.clear();
    cin.sync();
    }
    else
    {
    cout << "Hai scritto " << variabile << endl;
    }
    }
    }
    mettendo un testo ottengo comunque:

    codice:
    Inserisci un numero: Hai sbagliato a scrivere
    Inserisci un numero: Hai sbagliato a scrivere
    Inserisci un numero: Hai sbagliato a scrivere
    Inserisci un numero: Hai sbagliato a scrivere
    Inserisci un numero: Hai sbagliato a scrivere
    Inserisci un numero: Hai sbagliato a scrivere
    Inserisci un numero: Hai sbagliato a scrivere
    Inserisci un numero: Hai sbagliato a scrivere
    Inserisci un numero: Hai sbagliato a scrivere
    in loop infinito... e se uso break; funziona ma come ho detto prima non devo mai uscire dal programma...
    Altri suggerimenti?
    Grazie per la tempestività

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    31
    codice:
    #include <iostream>
    using namespace std;
    
    main()
    {
    while(1)
    {
    int variabile;
    cout << "Inserisci un numero: ";
    cin.clear();
    cin.sync();
    cin >> variabile;
    if(cin.fail()) {
    cout << "Hai sbaglaito a scrivere\n";
    break;
    } else {
    cout << "Hai scritto " << variabile << endl;
    }
    }
    }
    così va
    ale

  5. #5
    Non devo uscire dal programma

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    31
    Non è elegante ma funziona!!!

    codice:
    #include <iostream>
    using namespace std;
    
    main()
    {
     try{
    while(1)
    {
    int variabile;
    cout << "Inserisci un numero: ";
    cin.clear();
    cin.sync();
    cin >> variabile;
    if(cin.fail()) {
    cout << "Hai sbagliato a scrivere\n";
    //break;
    throw 1;
    } else {
    cout << "Hai scritto " << variabile << endl;
    }
    }
    }
    catch(int a){
    cout << "xd";
    system("./lol");
    } 
    
    }

  7. #7
    cin.sync() non sempre fa il suo lavoro (lo standard C++ non obbliga gli implementatori a fargli svuotare il buffer di input); in questi casi comunque lo si può sostituire facilmente con un'adeguata chiamata a cin.ignore():
    codice:
    #include <iostream>
    #include <limits>
    using namespace std;
    
    int main()
    {
        while (1)
        {
            int variabile;
            cout << "Inserisci un numero: ";
            cin >> variabile;
            if (cin.fail())
            {
                cout << "Hai sbagliato a scrivere" << endl;
                cin.clear();
                cin.ignore(numeric_limits<std::streamsize>::max(), '\n');
            }
            else
            {
                cout << "Hai scritto " << variabile << endl;
            }
        }
        return 0;
    }
    .
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Mitico! Funziona! Grazie mille! Ho ancora un bel po' di cose da imparare :$ ciao grazie di nuovo

  9. #9
    Di niente; ciao!
    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.