Ir ao conteúdo

Posts recomendados

Postado

Boa tarde pessoal, estou aprendendo C++ e cheguei em um impasse.

 

Tenho esse Codigo:

 

int menu = 1;

while(menu != 0)
    {
       cout << "Escolha uma opcao:\n" << endl; //menu de opções do programa
       cout << "1 - Exibir a lista.\n" << endl;
       cout << "2 - Incluir um jogo a lista.\n" << endl;
       cout << "3 - Excluir um jogo da lista. \n" << endl;
       cout << "0 - Sair do programa.\n" << endl;
       cin >> menu;
       if (menu == 1 || menu == 2 || menu == 3 || menu == 0)
       {...}else{

           cout << "\nOpcao invalida!\n" << endl;

       }

       

 

 

o resto não é importante para a minha dúvida.

A questão é se o usuário inserir um número que não seja nenhuma das opções ele vai pro else que exibe a mensagem e o laço continua, porém se o usuário inserir uma dado do tipo char ou string o programa vai pro final.

Gostaria de saber o que eu posso fazer para evitar que o usuário coloque um dado que não seja int ou se ele colocar o que fazer para não pular todo o laço.

Postado

@Felipe da Silva Bisso Boa tarde, 

         std::cin este objeto, dentro muitos de   seus métodos existe um que vai ajudar-te em uma 

boa solução: o método fail( )  , este método retorna true se o tipo de dados é 

incompatível, e false se o tipo de dados é compatível.

int toNumeric;
	std::cin >> toNumeric;
    if( true == std::cin.fail( ) ) cout << "[FAIL] It's not numeric value!" << endl;
	

____________________________________

Postado

Edit: achei a uma solução.

usei a função clear()  e ignore() no cin:

while (cin.fail() == true)
       {
           cin.clear();

           cin.ignore(std::numeric_limits<int>::max(),'\n');

           cin >> menu;

           

 

Bom dia, obrigado Mauro, coloquei essa função assim no meu codigo:

 

while (cin.fail() == true)
       {
           cout << "\nOpcao invalida, para escolher uma opcao digite o codigo da mesma.\n" << endl;
           cout << "Escolha uma opcao:\n" << endl; //menu de opções do programa
           cout << "1 - Exibir a lista.\n" << endl;
           cout << "2 - Incluir um jogo a lista.\n" << endl;
           cout << "3 - Excluir um jogo da lista. \n" << endl;
           cout << "0 - Sair do programa.\n" << endl;
           cin >> menu;
       }

 

Porém se digito uma palavra ou letra ele simplesmente pula esse while, reparei também quando usei o debug que a variavel menu fica com valor 0 quando digito uma letra ou palavra.

 

Tentei também fazer assim :

 

while (menu == 0)
       {
           cout << "\nOpcao invalida, para escolher uma opcao digite o codigo da mesma.\n" << endl;
           cout << "Escolha uma opcao:\n" << endl; //menu de opções do programa
           cout << "1 - Exibir a lista.\n" << endl;
           cout << "2 - Incluir um jogo a lista.\n" << endl;
           cout << "3 - Excluir um jogo da lista. \n" << endl;
           cout << "0 - Sair do programa.\n" << endl;
           cin >> menu;
       }

 

Mudei a opção de saida para ser 4, então ele fica em um loop infinito dentro deste laço e não pede para inserir nada no cin >> menu, ele apenas fica exibindo as mensagens varias vezes.

 

Alguma sugestão ? Obrigado.

 

 

Postado

         Muito bem, também tinha imaginado algo parecido, experimente abaixo pode vir

servir como resolução para os bugs de sua solução.

 

CODE:

   int numeric = 0;
   
   cout << "**** Entre com numero: ";
   cin >> numeric;
   
   while(cin.fail()){
       cout << "\r[ERRO]Entre com numero valido: ";
       cin.clear();
       cin.ignore(128u,'\n');
       
       cin >> numeric;
   }
   
   cout << "voce digitou numero: " << numeric << endl;

 

Mauro_Britivaldo_int_force.png

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!