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
parasetlocale(LC_CTYPE, "Portuguese")
e use pontos como separador de valores decimais na entrada. A diferença deste para o anterior é que usar a macroLC_CTYPE
indica asetlocale
para alterar apenas as funções que lidam com caracteres, ao invés deLC_ALL
que altera todas as propriedades de localidade possíveis (incluindoLC_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.