Dúvida sobre if-else em C

C

23/04/2022

Fiz o seguinte código em C:

#include <stdio.h>

int main()
{
int mes;

printf("Digite o número referente ao mês: ");
scanf("%i", &mes);

if(mes==4||mes==6||mes==9||mes==11)
printf("O mês tem 30 dias");
if(mes==1||mes==3||mes==5||mes==7||mes==8||mes==10||mes==12)
printf("O mês tem 31 dias");
else
printf("O mês tem 28 dias");


return 0;
}


Neste exemplo, meu código estava apresentando 2 resultados quando eu colocava valores referentes ao meses que têm 30 dias(que estão no 1º if). Isso já não acontece com o 2º if e o else.

Gostaria de saber o porquê disso e, se possível, uma resolução para o problema. Sou iniciante e acabo quebrando cabeça com if e else.
Matheus

Matheus

Curtidas 0

Melhor post

Nathália Hirth

Nathália Hirth

25/04/2022

Pessoal, acabei solucionando o problema. Basicamente, utilizei apenas 1 if e 1 else. Dentro deste else, coloquei if e else novamente. Mas, mantenho a minha dúvida, por que dessa forma funcionou e da outra não?

Ficou assim:

int main()
{
int mes;

printf("Digite o número referente ao mês: ");
scanf("%i", &mes);

if(mes==4||mes==6||mes==9||mes==11)
printf("O mês tem 30 dias");
else{
if(mes==1||mes==3||mes==5||mes==7||mes==8||mes==10||mes==12)
printf("O mês tem 31 dias");
else
printf("O mês tem 28 dias");}


return 0;
}


Olá Matheus,
Da forma anterior não funcionava pois o primeiro if não tinha um else e aí ele tratava como duas instruções separadas. Agora quando o if tem um else ele trata como uma mesma instrução.
Por exemplo, vc poderia ter usado tambem o else if direto ali no segundo if que daria certo.
GOSTEI 1

Mais Respostas

Matheus

Matheus

23/04/2022

Pessoal, acabei solucionando o problema. Basicamente, utilizei apenas 1 if e 1 else. Dentro deste else, coloquei if e else novamente. Mas, mantenho a minha dúvida, por que dessa forma funcionou e da outra não?

Ficou assim:

int main()
{
int mes;

printf("Digite o número referente ao mês: ");
scanf("%i", &mes);

if(mes==4||mes==6||mes==9||mes==11)
printf("O mês tem 30 dias");
else{
if(mes==1||mes==3||mes==5||mes==7||mes==8||mes==10||mes==12)
printf("O mês tem 31 dias");
else
printf("O mês tem 28 dias");}


return 0;
}
GOSTEI 0
Matheus

Matheus

23/04/2022

Compreendi, obrigado. Só não entendo uma coisa, mesmo como instruções diferentes, eles não deveriam imprimir apenas em caso de uma verificação correta?
GOSTEI 0
POSTAR