View Single Post
Old 03-06-2007, 15:26   #6
uomoserio
Senior Member
 
L'Avatar di uomoserio
 
Iscritto dal: Aug 2000
Messaggi: 608
Quote:
Originariamente inviato da marco.r Guarda i messaggi
Se vuoi usare gli stream del C++, puoi fare qualcosa di simile al seguente:
Codice:
#include <iostream>
using namespace std;

/* ... */
int n;
cin >> n
if ( cin.fail() ) // ho inserito dei caratteri
{
  cin.clear();
  while( !isdigit( cin.peek() ) ) cin.ignore();
}
Questo fa si' che in caso di errore vengano ignorati tutti i caratteri fino alla prima cifra.
Se preferisci che venga ignorata tutta la riga, allora puoi fare nel modo seguente
Codice:
#include <iostream>
using namespace std;

/* ... */
int n;
cin >> n
if ( cin.fail() ) // ho inserito dei caratteri
{
  cin.clear();
  while( cin.peek() != '\n' ) cin.ignore();
}
Vedi tu quale sia piu' adatto al tuo caso
Grazie!
E' esattamente quello che cercavo. Sapevo che cin adatta l'input alla variabile che lo deve contenere, ma non conoscevo tutte le sottofunzioni peek, fail, clear e ignore.
A dire il vero avevo visto queste cose qui:
http://www.cplusplus.com/reference/iostream/istream/
ma non ci ho capito un gran ché, forse perchè sono agli inizi!

Quote:
Originariamente inviato da marco.r Guarda i messaggi
No, flush va bene solo con l'output. Se anche funzionasse (ovvero svuotando il buffer di input) non puoi avere la certezza che questo contenga una sola linea di testo
In effetti me lo avete già detto in tanti, però a me funziona. Poi l'ho trovato scritto in molti forum, come soluzione di svuotamento del buffer.
Comunque ora che mi hai dato la soluzione migliore la sostituisco senza dubbio.

Grazie di tutto.
__________________
Intel Core2Quad Q6600 2,4GHz @ 3,0 GHz
2 Gb RAM 667 MHz
ATI HD2900XT
uomoserio è offline   Rispondi citando il messaggio o parte di esso