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:
- Incluindo a biblioteca
#include <limits>
- 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:
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.)
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: