Checagem de erro do scanf
Dica publicada em C/C++ / Introdução
Checagem de erro do scanf
Acho que isso incomoda alguns novos programadores em C,
seria a checagem de erro em scanf.
Exemplo, você quer fazer um menu bem simples com 3 opções, essas opções são inteiros (1, 2, 3)..
Quando você roda o programa, o menu funciona, mas se você digitar algo diferente de um inteiro, provavelmente o programa irá entrar em um loop infinito de fazer "nada", digamos, o programa ira "travar".
Como acabar com isso? Simples.
O scanf retorna o valor 0 (zero) para algum valor/caracter que ele não conseguir assimilar com o proposto, por exemplo se você entrar com "a" em um scanf que pede por '%d'.
Exemplo? OK. Voltando ao menu. Você usou esse comando para pegar a opção do usuário:
Exemplo, você quer fazer um menu bem simples com 3 opções, essas opções são inteiros (1, 2, 3)..
Quando você roda o programa, o menu funciona, mas se você digitar algo diferente de um inteiro, provavelmente o programa irá entrar em um loop infinito de fazer "nada", digamos, o programa ira "travar".
Como acabar com isso? Simples.
O scanf retorna o valor 0 (zero) para algum valor/caracter que ele não conseguir assimilar com o proposto, por exemplo se você entrar com "a" em um scanf que pede por '%d'.
Exemplo? OK. Voltando ao menu. Você usou esse comando para pegar a opção do usuário:
scanf("%d",&menu);
printf("Você escolheu a opção %d.",menu);
printf("Você escolheu a opção %d.",menu);
Se, o scanf retorna 0 (zero) quando há algum problema, então poderíamos substituir o código por:
if (scanf("%d",&menu) == 0) {
printf("Entre com um inteiro!");
} else {
printf("Você escolheu a opção %d.",menu);
}
printf("Entre com um inteiro!");
} else {
printf("Você escolheu a opção %d.",menu);
}
Vale lembrar que "scanf("%d",menu) == 0" é completamente diferente de "menu == 0".
Quando você usa o:
if (menu == 0) {
...
}
Você está testando se o valor de "menu" é 0 (zero).
Usando:
if (scanf("%d",&menu) == 0) {
...
}
Você está testando se o "scanf" assimilou.
Espero que isso seja de alguma ajuda.
Abraços.
Fique com Deus.
Se alguém quiser:
http://www.vivaolinux.com.br/scripts/verScript.php?codigo=613
Abraços,
fiquem com Deus.