Ir ao conteúdo

Posts recomendados

Postado

Como eu posso fazer esse exercício da melhor forma?

 

/* Faça um programa contendo uma função para verificar se o dia é válido (está no intervalo
entre 1 e 31) e se o mês está entre 1 e 12. Caso esteja incorreto, ler nova data. */

#include <stdio.h>

int data (int d, int m){ 


O máximo que eu consegui até agora foi isso, mas quando o número dá errado ele não entra no if de novo. 

 

if (d >= 1 && d <= 31 && m >= 1 && m <= 12)
printf ("Dia valido!"); 

else 
    printf ("Entre com um dia valido: ");
    scanf ("%d", &d);

    printf ("Entre com um mes valido: ");
    scanf ("%d", &m);
    
}


int main (){
    int dia, mes; 
    
    printf ("Entre com o dia: ");
    scanf ("%d", &dia);

    printf ("Entre com o mes: ");
    scanf ("%d", &mes); 
    
    data(dia, mes);
}

 

Postado

Você precisa fechar um laço no início do programa pra ele voltar ao if. Por exemplo 'do [todo o programa] while [dia/mês é inválido]' ou 'while [dia/mês é inválido], [entre dia/mês válido]'.

Por que sua função main está deslocada abaixo do teste condicional?

  • Obrigado 1
Postado

@Shaman93 Eu tentei usar um do while no main mas como eu posso dizer pro main que o numero é invalido? 

Esse que é o meu problema.

Eu consigo resolver o problema se fosse todo no main mas como pede função minha dificuldade tá sendo entender isso.  

Postado
9 minutos atrás, Gabbie1 disse:

Eu tentei usar um do while no main mas como eu posso dizer pro main que o numero é invalido?

Da mesma forma que você usou o comando if. O while também é um comando condicional, tem um if escondido nele. Você pode fazer por exemplo 'do [pergunta dia e mês] while [dia e mês forem inválidos]'. No seu if você testou se o dia e mês eram válidos, basta testar a condição contrária (dia menor que 1 ou maior que 31, mês menor que 1 ou maior que 12). Atente que o operador '&&' significa E, ambas condições devem ser cumpridas. Nesse caso o operador que você precisa usar é '||', OU, se qualquer uma das condições não for cumprida é satisfeito.

  • Amei 1
Postado

@Shaman93 Entendi! Obrigada. 

Eu tentei dessa forma, inverti os operadores etc, mas achei que minha lógica estivesse errada e tivesse alguma forma trazer essa informação da função. 

Fico feliz em saber que minha lógica não estava totalmente errada, tinha só esquecido do || e metido && em tudo no while.  

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!