Ir ao conteúdo
  • Cadastre-se
Paulo Roberto Lobo

C RESOLVIDO Outro problema com if

Recommended Posts

Meu programa precisa receber o ano de nascimento do usuário e o seu gênero. Caso seja do sexo Masculino e tenha 18 anos, a mensagem que aparecerá na tela será "Serviço Militar Obrigatório.". Caso contrário aparecerá "Insento de Serviço." 

 

O problema é que o if não está funcionando propriamente. Na teoria, se eu digitasse no campo do ano de nascimento o valor 2000, e no campo do gênero M (masculino), o programa deveria apresentar a primeira mensagem, mas não o faz.

 

Segue o código abaixo: 

#include <stdio.h>

main ()
{int data, idade;
 char sexo;
 printf ("Insira o ano de seu nascimento: ");
 scanf ("%d", &data);
 printf ("Insira o seu sexo: ");
 scanf ("%s", &sexo);
 idade=2018-data;
 if (sexo=='M'&&idade==18)
 {
            printf ("Servico Militar Obrigatorio.");
 }
 else
 {
            printf ("Isento de Servico.");
 }
}

 

Editado por Simon Viegas
Inserir tag CODE

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde, né?

 

Como está usando somente um caractere, acho que esse %s deveria ser %c.

A comparação de string se dá com o uso do strcmp, mas com o caractere único não sei se pode usar a igualdade (==).

  • Curtir 3

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você usou o especificador de tipo errado no scanf, colocou %s que é para strings, mas deveria ser %c para ler apenas 1 caractere.

 

scanf (" %c", &sexo);

Observe que coloquei um espaço antes do %c na string " %c", isso serve para descartar quaisquer caracteres vazios/branco (espaço, tabulação, nova linha '\n', etc) que venham antes da letra, pois assim o %c só vai pegar o primeiro caractere não-vazio/branco, que seria a letra digitada a qual estamos interessados.

 

Note também que caractere minúsculo 'm' é diferente do caractere maiúsculo 'M', então se digitar minúsculo não vai satisfazer a condição do seu if.

 

 

E leia minha assinatura abaixo para ver como postar códigos no fórum.

  • Curtir 2
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
7 minutos atrás, Math.Pi disse:

Boa tarde, né?

 

Como está usando somente um caractere, acho que esse %s deveria ser %c.

A comparação de string se dá com o uso do strcmp, mas com o caractere único não sei se pode usar a igualdade (==).

Olá novamente. :D 

Cara, eu tinha feito com o %c logo de primeira quando eu fiz a primeira "versão" do programa. Mas o amigo que respondeu aqui em depois de você ajudou.

O lance era esse espaço que tem que ter antes do %c. O problema que dava quando eu não colocava o espaço era que o programa simplesmente avançava o processo inteiro após inserir o ano. Nem me deixava digitar alguma coisa no campo do gênero. 

Mas valeu mesmo assim.

adicionado 0 minutos depois
9 minutos atrás, isrnick disse:

Você usou o especificador de tipo errado no scanf, colocou %s que é para strings, mas deveria ser %c para ler apenas 1 caractere.

 


scanf (" %c", &sexo);

Observe que coloquei um espaço antes do %c na string " %c", isso serve para descartar quaisquer caracteres vazios/branco (espaço, tabulação, nova linha '\n', etc) que venham antes da letra, pois assim o %c só vai pegar o primeiro caractere não-vazio/branco, que seria a letra digitada a qual estamos interessados.

 

Note também que caractere minúsculo 'm' é diferente do caractere maiúsculo 'M', então se digitar minúsculo não vai satisfazer a condição do seu if.

 

 

E leia minha assinatura abaixo para ver como postar códigos no fórum.

Deu certo man, valeu. O problema que eu não conhecia era o do espaço antes do %c.

  • Curtir 3

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×