If-else

2 respostas
Fidel19

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

2 Respostas

Arnaldo1

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);

}
FearX

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

Criado 18 de fevereiro de 2020
Ultima resposta 18 de fev. de 2020
Respostas 2
Participantes 3