Ir ao conteúdo
  • Cadastre-se
johnsigma

C Erro em algoritmo em C

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

  • Curtir 3
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

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

×