Problema con Menu c++

Bueno es una tontería y es algo trivial pero no consigo hacer para que después de seleccionar una opción en el menu, antes de que se imprima el menu tenga que pulsar una tecla. Le tengo pueso un cin.get(), pero se lo pasa por ahí.

#include<iostream>
#include<cstdlib>
using namespace std;

unsigned int Menu();
unsigned int MenuName();

int main(){
   unsigned int opc,opcion;
   string name;
   do{
      opcion=Menu();
      switch(opcion){
         case 1:
            cout<<"Your name:";
            cin>>name;
            cin.get();
            break;
         case 2:
            cout<<"Hello"<<endl;
            cin.get();
            break;
         case 3:
            cout<<"Hello"<<endl;
            cin.get();
            break;
         case 4:
            cout<<"bye"<<endl;
            cin.get();
            break;
      }
   }while(opcion!=4);
}
unsigned int Menu(){
   unsigned int opt;
   system("clear");
   cout<<"**************************************************************************\n"<<endl;
   cout<<"\t1 - Name"<<endl;
   cout<<"\t2 - Address"<<endl;
   cout<<"\t3 - Surname"<<endl;
   cout<<"\t4 - Exit"<<endl;
   cout<<"\n\n**************************************************************************\n"<<endl;
   cout<<"\t\tSelect option: ";
   cin>>opt;
   cin.get();
   return opt;
}
El problema es que al usar el "cin >>" el fin de linea '\n' que pusiste al pulsar enter queda en el stream y cuando viene el cin.get() este vee el '\n' y deduce que ya leyo la linea, por eso regresa inmediatamente de la funcion.

La solucion si vas a mezclar "cin >>" con "cin.get()" es que limpies el stream ya sea despues de usar el >> o antes de llamar a get().
#include<iostream>
#include<cstdlib>
#include<limits>   // <--------------------------
using namespace std;

unsigned int Menu();
unsigned int MenuName();

int main(){
   unsigned int opc,opcion;
   string name;
   do{
      opcion=Menu();
      switch(opcion){
         case 1:
            cout<<"Your name:";
            cin>>name;
            break;
         case 2:
            cout<<"Hello"<<endl;
            cin.get();
            break;
         case 3:
            cout<<"Hello"<<endl;
            cin.get();
            break;
         case 4:
            cout<<"bye"<<endl;
            cin.get();
            break;
      }
   }while(opcion!=4);
}
unsigned int Menu(){
   unsigned int opt;
   system("clear");
   cout<<"**************************************************************************\n"<<endl;
   cout<<"\t1 - Name"<<endl;
   cout<<"\t2 - Address"<<endl;
   cout<<"\t3 - Surname"<<endl;
   cout<<"\t4 - Exit"<<endl;
   cout<<"\n\n**************************************************************************\n"<<endl;
   cout<<"\t\tSelect option: ";
   cin>>opt;
   cin.ignore(numeric_limits<streamsize>::max(), '\n');  //<---------------------
   cin.get();
   return opt;
}
2 respuestas