Ir ao conteúdo

Posts recomendados

Postado

Fiz um programa com o seguinte comando: "Ler nome, sexo e idade. Se sexo for feminino e idade menor que 25, imprime o nome da
pessoa e a palavra “ACEITA”, caso contrario imprimir “NÃO ACEITA”.". Fiz o programa porém quando digito sexo 'feminino' e idade abaixo de 25 ele retorna "Não aceito" ao invés de "Aceito". O que pode tá errado no meu código?

Código:

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <string.h>

int main(){

setlocale(LC_ALL, "Portuguese_Brazil");

char nome[200];
int idade;
char sexo[50];

setbuf(stdin, NULL);

printf("Digite seu nome: ");
gets(nome);

printf("Digite seu sexo: ");
gets(sexo);

printf("Digite sua idade: ");
scanf("%d",&idade);

if(sexo=="feminino" && idade<25){
printf("\\n%s\\n",nome);
printf("Situação: Aceita.\\n");
}else{
printf("\\n%s\\n",nome);
printf("Situação: Não aceita.\\n");
}

return 0;
}

OBS: Não quero apenas outra forma de escrever o programa(mas se quiser pode colocar), quero saber porque esse código está dando errado!

  • Curtir 1
  • Obrigado 1
Postado
3 horas atrás, HwapX disse:

Seu problema está na comparação do sexo:


if(sexo=="feminino" && idade<25){

Em C não é possível comparar strings dessa forma, você deve utilizar a função strcmp(http://www.cplusplus.com/reference/cstring/strcmp/)


if(strcmp(sexo, "feminino") == 0 && idade<25){

 Você pode conferir o resultado em: https://ideone.com/m5HEpY.

Tem alguma outra forma de comparar String sem usar a função Strcmp? Uma forma mais manual?

  • Curtir 1
  • Obrigado 1
Postado

@johnsigma     tem como compara manualmente e seria assim :

int flag=0;
if(sexo[0]=='f')flag++;
if(sexo[1]=='e')flag++;
if(sexo[2]=='m')flag++;
if(sexo[3]=='i')flag++;
if(sexo[4]=='n')flag++;
if(sexo[5]=='i')flag++;
if(sexo[6]=='n')flag++;
if(sexo[7]=='o')flag++;
if(flag==8)printf("sexo igual feminino , certo !");
else printf("erro , sexo diferente de feminino !");

 

  • Curtir 2
  • Obrigado 1
Postado

Você também poderia comparar caractere a caractere utilizando um loop for ou while, algo como:

char feminino[] = "feminino";
int i = 0;

//Compara o caractere na posição i 
//    sexo[i] == feminino[i]
//Se a posição i não for o final da string(0)
//    sexo[i]
while(sexo[i] == feminino[i] && sexo[i])
	//Avança para a proxima posição
	i++;

//Compara novamente a última posição e armazena o resultado na variável igual
int igual = sexo[i] == feminino[i];

Isso poderia até ser convertido em uma função:

int cmp(char* str1, char* str2) {
    int i = 0;
    while(str1[i] == str2[i] && str1[i])
        i++;
        
    return str1[i] == str2[i];
}

 

  • Curtir 3
  • Obrigado 1
Postado

Olá todos.

Use indicativo do sexo, por exemplo número 0 para feminino, se masculino o número 1. Isso já é o bastante para totalidade dos usuários que sabem ler direitinho entre outras coisas.

 

0 - para feminino

1 - para masculino

 

((sexo == 0) && (idade < 25)) // é verdade se  mulher com menos de 25

  • Curtir 2
  • Obrigado 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!