Como era de se esperar, é possível colocar uma sentença condicional dentro de outra. Por exemplo, se quisermos imprimir uma mensagem apropriada caso um número seja positivo ou negativo e par ou ímpar, nós poderíamos escrever o seguinte:
#include <stdio.h> main(void) { int num; /* Obtem um numero do usuario */ printf("Entre com um inteiro: "); scanf("%d", &num); /* Imprime uma mensagem dizendo se o numero e positivo ou negativo, positivo ou negativo. */ if (num >= 0) { if (num % 2 == 0) printf("O numero e par e positivo\n"); else printf("O numero e impar e positivo\n"); } else { if (num % 2 == 0) printf("O numero e par e negativo\n"); else printf("O numero e impar e negativo\n"); } }
O aninhamento de sentenças if-else sem usar chaves ({ e }) para delimitar o bloco de senteças a ser executado pode trazer efeitos indesejados.
Há uma regra simples para determinar qual if está associado a qual else.
O exemplo seguinte está errado porque associa o else ao if "incorreto":
#include <stdio.h> main(void) { int num; /* Obtem um numero do usuario */ printf("Entre com o numero de peras: "); scanf("%d", &num); /* Imprime uma mensagem dizendo se o numero de peras e 0 ou 1 (*** isto esta' errado !! ***) */ if (num != 0) if (num == 1) printf("Voce tem uma pera.\n"); else printf("Voce nao tem nenhuma pera.\n"); }
Neste exemplo, o if tem o seguinte significado, segundo a regra de associação:
#include <stdio.h> main(void) { int num; /* Obtem um numero do usuario */ printf("Entre com o numero de peras: "); scanf("%d", &num); /* Como a sentenca if e' vista pelo compilador */ if (num != 0) if (num == 1) printf("Voce tem uma pera.\n"); else printf("Voce nao tem nenhuma pera.\n"); }
Para evitar este problema, chaves ({ e }) devem ser usadas para tirar a ambiguidade. O exemplo abaixo mostra como as chaves podem ser inseridas para corrigir o programa acima.
#include <stdio.h> main(void) { int num; /* Obtem um numero do usuario */ printf("Entre com o numero de peras: "); scanf("%d", &num); /* Como corrigir o problema (este programa funciona) */ if (num != 0) { if (num == 1) printf("Voce tem uma pera.\n"); } else printf("Voce nao tem nenhuma pera.\n"); }
/usr/local/lib/tex/inputs///Programas/Exercicio_04-1.c
Armando Luiz Nicolini Delgado