Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Gabriel Freire

Erro em scanf("%d", var) quando a entrada eh char

Recommended Posts

Desculpe pelo mas ainda estou comçando a programar em C e me deparei com esse problema

 


for(;;)
    {
        printf("Type one of options below:\n");
        printf("1 - List all Products.\n");
        printf("2 - Insert a Product.\n");
        printf("3 - Remove a Product by code.\n");
        printf("4 - Find a Product by code.\n");
        printf("5 - List Products with price higher than ...\n");
        printf("6 - Average price of all Products.\n");
        printf("0 - EXIT.\n\nOption: ");
        scanf("%d", &opt);
        
        printf("\n");
        
        if(opt == 0)
            break;
        else if(opt == 1)
            toStringList(list);
        else if(opt == 2)
            insertAtFront(&list);
        else if(opt == 3 || opt == 4)
        {
            printf("Type the code: ");
            scanf("%d", &code);
            
            if(opt == 3)
                removeByCode(&list, code);
            else
                findByCode(list, code, 1);
        }
        else if(opt == 5)
        {
            printf("Type the price: ");
            scanf("%f", &price);
            
            toStringWithPriceHigherThan(list, price);
        }
        else
            printf("Average of products is: %.2f\n\n", average(list));
    }

na hora de escolher a opção e o usuario digitar qq outro char, o programa fica doido no loop infinito sem deixar eu fazer mais nda.

 

qual é o melhor jeito pra tratar estes dados de entrada, para que isso não ocorra?

Compartilhar este post


Link para o post
Compartilhar em outros sites

você declarou a variavel de escolher a opção como Char ou Int ?

Se você declarou Int, e digitar Letra da Erro.

Declare como Char e na verificação coloca aspas simples nos numeros.

Compartilhar este post


Link para o post
Compartilhar em outros sites

faça um loop validando o input, por exemplo:

 

do
{
    i = input();
} while (!isValidInput(i));

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.