Quote Originariamente inviata da shodan Visualizza il messaggio
Estremamente al volo.
Usa sempre:
codice:
string line;
while (getline(cin,line)) {
   ... etc


}
Non usare mai l'operatore >> con cin per acquisire un input da console. In questo modo non invalidi mai l'input e ti eviti tutti quei cin.clear(), cin.ignore() etc.
Inserisci line in un ostringstream e usa quello per validare l'input.
Posso togliere tutti i cin.clear(), cin.ignore() se faccio in modo che da nessuna parte ci sia cin>>..., altrimenti c'e' sempre rischio di trovare cin in 'errore'.

Ne segue quindi di evitare come la peste cin>>... (cosa che avevi già detto, però che non viene detta ai neofiti da nessuna parte, almeno dove ho guardato io...).

Stando cosi' le cose la funzione pause potrebbe diventare

codice:
void pause()
{
  std::cout<<"\nPremere INVIO per continuare\n";
  std::string input;
  while(std::getline(std::cin , input)&&(input.length!=0))
  {
    //o fa niente, o messaggio che l'input non e' corretto, o altro
  }
};
Per quanto riguarda il resto, non capisco perchè mi consigli di usare ostringstream e non istringstream.

Ad esempio, per l'input degli int potrebbe essere una cosa del genere (?):

codice:
void input(int& par)
  {
    std::string input;
    while(std::getline(std::cin, input))
    {
      std::istringstream linestream(input);
      if ((linestream >> par)&&(linestream.eof()))//se non metto il controllo su eof, 3.56 viene preso come 3
      {
        break;
      }
    }
  };
@alex.catto: spero che la mia frase dell'utente utonto non ti abbia offeso, non era quella l'intenzione. Volevo semplicemente farti riflettere su come l'utente reale sia ben diverso da un utente ideale.
Conta che proprio settimana scorsa ho fatto presente un problema di validazione di input dei dati di un software che uso per lavoro (non sono programmatore di professione, sono un perfetto ignorante in materia), dal costo di alcune migliaia di euro, ma che mi scivola sulla buccia di banana di non fare validazione dell'input. Questo mi è costato quasi mezza giornata di lavoro e imprecazioni per scoprire che dove avrei dovuto immettere 0.044, avevo in realta' immesso o.044 (molto spesso non uso il tastierino numerico per immettere i numeri, e sulla tastiera lo zero e la lettera 'o' sono vicini), e il programma bel bello, alla pressione del tasto ok non mi ha dato alcun messaggio, e di sua iniziativa ha posto a zero quel valore...ecco cosa intendo per utonto.