Ir ao conteúdo
  • Cadastre-se

C Loop infinito em C ao digitar número decimal ou caractere em váriavel inteira


Korvus

Posts recomendados

Estou com um trabalho da faculdade pra sábado, está quase tudo pronto mas estou com um bug, ao digitar o valor da resposta em numero decimal ou caractere (sendo que a variavel só permite numeros inteiros como resposta) ocorre loop infinito.

 

Preciso que o do-while entenda número decimal ou caractere como invalido e faça a pergunta se repetir (O que está acontecendo atualmente é que o programa entra em loop infinito ou com o uso do setbuf(stdin, NULL) pula a pergunta)

Demonstraçao (fragmento do codigo, tirei só algumas variaveis que nao vem ao caso pra n ficar extenso)
 

int main(){
    int dia, mes, ano;
    float peso;
    setlocale(LC_ALL, "Portuguese");
    do{
    do{
            printf("Digite o dia de nascimento da criança (Exemplo: 02/04/2016, digite 2):\n");
            scanf("%d", &dia);
    }while(dia<1 || dia>31);

 

Link para o comentário
Compartilhar em outros sites

int main()
{
    int dia, mes, ano;
    float peso;
    setlocale(LC_ALL, "Portuguese");
    do
    {
        printf("Digite o dia de nascimento da criança (Exemplo: 02/04/2016, digite 2):\n");
        while(scanf("%d", &dia) == 0) //Quando o valor lido corresponde ao tipo esperado o retorno do scanf é 1. Do contrario algo deu errado.
        {
            printf("Entrada invalida, tente novamente:\n");
            getchar();
        }
    }
    while(dia<1 || dia>31);
}

 

adicionado 10 minutos depois

Acho que o mais certo seria

Citação

while(scanf("%d", &dia) != 1)

Teria que testar para ver

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...