Nicolas, Muito obrigado! O seu comentário ajudou bastante na minha pesquisa.
O comando "cin>>" não trata entradas inválidas. Logo se alguém digitar uma string, gera um exceção não tratada, que acaba gerando o loop infinito. Por isso se deve criar um código para tratar essa exceção.
No meu caso, a resolução mais simples que consegui implementar foi essa:
cin >> chute; //comando cin serve para receber valores
if (!cin){
cout << "Por favor, digite um número! ";
cin.clear(); //limpa entradas erradas
cin.ignore(256, '\n'); //descarta
}
Não sei se é a melhor forma, mas resolveu o problema. Se alguém souber de outra forma mais sofisticada para tratar essa exceção, seria ótimo conhecer.
O código completo ficou assim:
#include<iostream> //inclusao da biblioteca padrao para entrada e saida de dados
using namespace std; //comando usado para não precisar colocar "std::" antes das funcoes padroes
int main () {
cout << "**************************************" << endl;
cout << "* Bem-vindos ao jogo da adivinhação! *" << endl;
cout << "**************************************" << endl;
const int NUM_SECRETO = 42;
//cout << "O número secreto é: " << NUM_SECRETO << ". Não conte para ninguém!" << endl;
bool acertou = false;
int tentativas = 0;
double pontuacao = 1000.0;
while(!acertou) { //enquanto a variável "acertou" for falsa. seria o mesmo de fazer "while(acertou == false)"
tentativas++;
int chute; //declaracao de variavel
cout << "Tentativa: " << tentativas << endl;
cout << "Qual o valor do seu chute? ";
cin >> chute; //comando cin serve para receber valores
if (!cin){
cout << "Por favor, digite um número! ";
cin.clear(); //limpa entradas erradas
cin.ignore(256, '\n'); //descarta
}
double pontos_perdidos = abs(chute - NUM_SECRETO)/2.0; //abs funcao que devolve apenas o valor absoluto
pontuacao = pontuacao - pontos_perdidos;
cout << "O valor do seu chute é: " << chute << endl;
bool acerto = chute == NUM_SECRETO; //bool é uma variavel booleana que recebe true or false
bool chute_maior = chute > NUM_SECRETO;
if(acerto) {
cout << "Parabéns! você acertou o número secreto." << endl;
acertou = true;
}
else if (chute_maior) {
cout << "Seu chute foi MAIOR que o número secreto." << endl;
}
else {
cout << "Seu chute foi MENOR que o número secreto." << endl;
}
cout << "**************************************" << endl;
}
cout << "Fim de jogo!" << endl;
cout << "Número de tentativas: " << tentativas << endl;
cout.precision(2);
cout << fixed;
cout << "Sua pontuação foi: " << pontuacao << endl;
cout << "**************************************" << endl;
}
Agradeço a todos que responderam!