If-else

podemos ter um conjunto de if-else sem usar chavetas?

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.

Regra de associação:
Um else está associado com a última ocorrência do if sem 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”);
}

A explicação do colega Arnaldo1 tá bem feita e detalhada.

Apenas para complementar, em algumas linguagens você não tem as chaves como bloco de instrução. O exemplo mais famoso é claramente Python, onde você usa identação no lugar das chaves.

Geralmente, quando um if não precisa de um bloco de código - isso é, vai ter apenas uma linha a ser executada - você pode só fazer:

if(valor==VALOR_MAXIMO)
return valor

Agora, se você tem duas ou mais instruções de código, é obrigatório o uso de blocos de código (independente da sintaxe).

[]'s