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

    [C++] controllo se l'elemento da tastiera corrisponde a quello voluto

    buon giorno a tutti,
    mi scuso prima di tutto del titolo poco chiaro ma non sapevo come scrivere il problema che ho in mente...
    vorrei effettuare un controllo in c++ che mi restituisca attraverso un "cout <<" un errore scritto, stesso da me ovviamente, se in un "cin >>" precedente dovevo ad esempio inserire un dato di tipo intero anzicchè magari un float o char. faccio un esempio chiaramente ignorando la sintassi nel punto di controllo

    codice:
    "voglio un int in n"
    do
      {
        cin >> n;
        if (n !="valore intero")
        {
         cout << "hai messo un valore errato riprova!" << endl;
        } 
    } while (n = "valore intero")
    grazie mille!

  2. #2
    se tu inizializzi una variabile int n; nel momento in cui leggerà un valore da tastiera diverso da un intero, il programma va in crash.. cmq se non ho capito male quello che cerchi di fare tu riguarda la gestione delle eccezioni..

    http://www.cplusplus.com/reference/exception/exception/

    ti permette appunto di gestire le possibili eccezioni che il programma ti può dare

  3. #3
    Originariamente inviato da benestasio2
    se tu inizializzi una variabile int n; nel momento in cui leggerà un valore da tastiera diverso da un intero, il programma va in crash..
    No, e non c'entrano neanche le eccezioni.

    Se da uno stream cerchi di leggere (con l'operatore >>) dati per una variabile di un certo tipo ma l'estrazione fallisce perché l'utente inserisce dei dati non validi (ad esempio, appunto, lettere quando si richiede un intero), lo stream imposta il failbit tra i suoi bit di stato. Puoi verificare questa condizione controllando dopo il tentativo di estrazione se cin.fail() è true.
    In tal caso, resetta i bit di stato (cin.clear()), ignora il resto della linea (cin.ignore(std::numeric_limits<std::streamsize>:: max(), '\n' ) e riprova l'acquisizione.
    In alternativa, un metodo più robusto può essere acquisire l'intera linea in una std::string con la funzione std::getline (occhio, non il metodo cin.getline) e poi estrarne i dati con un istringstream.
    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.