0
respostas

Qual a melhor forma de restringir o tipo de dado em std::cin?

No seguinte projeto, da aula nº 2 ("Verificando as tentativas"), o programa entra em loop infinito caso o usuário entre com um valor inválido – e.g. uma letra, uma String, ou um número que ultrapasse o range do tipo int – em cin >> chute:

Pesquisando [1], resolvi o problema da seguinte forma:

  1. Incluindo a biblioteca #include <limits>
  2. Incluindo a seguinte condição no código:
    if (!cin)
    {
        cout << "Entrada inválida!" << endl;
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
    }
    else if (acertou) 
    {
        ...

Dúvidas:

  1. Essa realmente seria a melhor forma de resolver o problema, ou existem outros pontos a serem considerados? (Caso conheçam pontos relacionadas a boas práticas, que, por exemplo, recomendam que o problema seja resolvido de outra forma.)

  2. Usando esse tipo de solução, como gerar um erro de opção inválida quando o usuário pressionar a tecla <Enter> quando o campo de digitação estiver em branco? (Ao invés de apenas ocorrer um salto de linha.)


NOTAS:

[1] Alguns conteúdos encontrados durante a pesquisa: