Problem with scanf on% d receiving a keyboard letter

0

I have a problem, I am reading a int %d by scanf , but if the user types a letter the program enters loop .

void chama_menu_switch(Fila **f, int n){

char confi;
int i,y,x,a,z;
double r;
a = 0;
int b;
for (i = 0; z != 11; i++) { // inicio for

printf("|*|Comandos Menu 1.0|*|\n1 - Criar nova coluna\n2 - Deletar uma coluna\n3 - Inserir receita em coluna\n4 - Remover receita em coluna\n5 - Visualizar lista de colunas\n6 - Remover despesa em coluna\n7 - Inserir despesa em coluna\n8 - Visualiza despesas em uma coluna\n9 - Visualiza receitas em uma coluna\n10 - Calcular lucro bruto\n11 - Sair\n");
    //_flushall();
b = scanf("%d%*c",&z);
    __fpurge(stdin);
    fflush(stdout);
    if (b == 0) {
        printf("entro");
        system("pause");
        scanf(" %d",&b);
    }

I made a mini menu using switch in the console .. it works normally, the default of switch realizes that it is not in cases and of break , but it ignores scanf e enter loop .

    
asked by anonymous 10.06.2016 / 02:53

1 answer

1

I structured my menus more or less this way friend

int opcao;

do{
    printf("1- Opcao 1 \n2- Opcao 2 \n0- Sair");
    scanf("%d", &opcao);

    switch(opcao){
        case 1: printf("Opcao 1"); break;
        case 2: printf("Opcao 2"); break;
    }
}while(opcao != 0)
    
10.06.2016 / 15:05