1
resposta

Números negativos sendo passados para inteiros positivos

No começo da aula 3 do curso resolvi testar meu código e colocar um número negativo muito grande para ver o que acontece com os pontos, nesse processo eu acabei encontrando um bug no programa, com números muito negativos muito altos ele pega um valor inteiro diferente, como se contasse a quantidade de bytes de forma diferente. Por que isso acontece e como consertar? Percebi também que isso acontece quando digito coisas diferente de número inteiro, gostaria de tampar este buraco mas como saber se a pessoa digitou algo que não é um número inteiro se o scanf já recebe apenas número inteiro?

Aparece isso no console:

Tentativa 3 de 5
Qual é o seu chute? -1000000000000000000000000000
Seu chute foi 402653184
Seu chute foi maior que o número secreto
Tentativa 4 de 5
Qual é o seu chute? -10
Seu chute foi -10
Você não pode chutar números negativos!
Tentativa 4 de 5
Qual é o seu chute? -999999999999999999999999999999999999999999
Seu chute foi 1
Seu chute foi menor que o número secreto
1 resposta

Oi João,

Isso acontece pois você está utilizando um número do tipo inteiro. os inteiros tem um tamanho que varia de -2147483648 até 2147483647 qualquer valor acima ou abaixo desse range faz o sistema apresentar erro nos cálculos.

Outro problema que você mencionou é que dá um problema quando você digita números diferentes de inteiro.

Isso realmente é um problema para o seu sistema, para determinadas coisas você não poderá utilizar números inteiros, você terá que trocar para double ou float, mas dependendo do caso você também terá um erro.

Dá uma olhada na documentação da linguagem C, tem vários manuais, apostilas e livros presentes na internet. E você terá muitas informações sobre tamanhos de variáveis.