Executando verificação de segurança...
2

Percebi que está usando Windows, como uso um sistema Linux é difícil reproduzir um ambiente parecido, mas usando Wine, (uma camada de compatibilidade para executar programas Windows no Linux) e o MinGW para compilar o código para o executável PE (utilizado no Windows) consegui reproduzir o comportamento que você relata.

Dado a função:

setlocale(LC_ALL, "Portuguese");

O problema está na entrada "1.33", "1.88" e "2.44". Você definiu a localidade como "Portuguese", isso altera o comportamento de algumas funções e isso inclui o scanf, como em português não usamos pontos para separar a parte decimal de sua parte inteira, mas sim vírgulas, o program espera que você entre com "1,33", "1,88" e "2,44". Usar ponto ao invés de vírgula com a localidade alterada vai levar a um comportamento que você não espera. As suas opções são:

  • Use vírgula nas entradas de ponto flutuante;
  • Remova função setlocale e use pontos como separador de valores decimais na entrada, o que te levará a problemas com caracteres acentuados (o CMD do Windows é uma merda e não usa Unicode por padrão);
  • Altere setlocale para setlocale(LC_CTYPE, "Portuguese") e use pontos como separador de valores decimais na entrada. A diferença deste para o anterior é que usar a macro LC_CTYPE indica a setlocale para alterar apenas as funções que lidam com caracteres, ao invés de LC_ALL que altera todas as propriedades de localidade possíveis (incluindo LC_NUMERIC que é o responsável pelo caractere separador de números decimais), o que resolve o problema de caracteres acentuados sem exigir que você use vírgulas como separador.

E uma dica extra, remova system("chcp 65001"), a função system é raramente recomendada, pois mesmo que esteja definida no padrão ISO C, o comando que você passa para ela é dependente do sistema operacional.

Carregando publicação patrocinada...