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 <iostream> using namespace std; int main( ){ int num; // Obtem um numero do usuario cout << "Entre com um inteiro: "; cin >> num; // Imprime uma mensagem dizendo se o numero e positivo ou negativo, // positivo ou negativo. if (num >= 0) { if (num % 2 == 0) cout << "O numero e par e positivo\n"; else cout << "O numero e impar e positivo\n"; } else { if (num % 2 == 0) cout << "O numero e par e negativo\n"; else cout << "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 <iostream> using namespace std; int main( ){ int num; // Obtem um numero do usuario cout << "Entre com o numero de peras: "; cin >> num; // Imprime uma mensagem dizendo se o numero de peras e 0 ou 1 // (*** isto esta' errado !! ***) if (num != 0) if (num == 1) cout << "Voce tem uma pera.\n"; else cout << "Voce nao tem nenhuma pera.\n"; }
Neste exemplo, o if tem o seguinte significado, segundo a regra de associação:
#include <iostream> using namespace std; int main( ){ int num; // Obtem um numero do usuario cout << "Entre com o numero de peras: "; cin >> num; // Como a sentenca if e' vista pelo compilador if (num != 0) if (num == 1) cout << "Voce tem uma pera.\n"; else cout << "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 <iostream> using namespace std; int main( ){ int num; // Obtem um numero do usuario cout << "Entre com o numero de peras: "; cin >> num; // Como corrigir o problema (este programa funciona) if (num != 0) { if (num == 1) cout << "Voce tem uma pera.\n"; } else cout << "Voce nao tem nenhuma pera.\n"; }