Ajuda em exercício [FACULDADE] [NOVATO]

Olá, galera. Faço Engenharia Elétrica e recentemente meu professor de lógica de programação me passou uma lista de exercícios. Consegui fazer a maior parte, mas estou tendo dificuldade com os exercícios que envolvem comparação de strings. Gostaria que me explicassem por que o programa está dando erro.

Segue aqui o exercício que eu não consegui resolver:

“Entrar com nome, sexo e idade de uma pessoa. Se a pessoa for do sexo
feminino e tiver menos que 25 anos então imprimir nome e a mensagem:
ACEITA, caso contrário, imprimir nome e a mensagem: NÃO
ACEITA.(considerar M e F).”

O código-fonte:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main()
{
    char nome, sexo;
    int idade;
    printf("\n\n Insira o seu nome: \n\n");
    scanf("%s", &nome);
    printf("\n\n Insira sua idade: \n\n");
    scanf("%d", &idade);
    printf("\n\n Insira o seu sexo: M - masculino F - feminino \n\n");
    scanf("%c", &sexo);
    if (strcmp(sexo,"F")==0 && idade<25)
    {
        printf("%s",nome,"\n ACEITA \n");
    }
    else
    {
        printf ("%s", nome,"\n Nao aceita \n");
    }
    printf("\n\n");
    system("pause");
    return 0;
}

Agradeço desde já!

Qual a saída quando você executa o código?

Se sexo é um char entao vc compara ==

if( sexo == ‘f’ || sexo == ‘F’ )

Olá!

O nome tem que ser um vetor char, logo deverá ser nome[TAMANHO].

Outro ponto é que quando você digita a idade e dá um ENTER, este caractare ‘\n’ fica no buffer. O scanf irá verificar se há algo no buffer e caso tenha e seja compatível com o scanf() ele o armazena. Por exemplo:

Insira sua idade: 26[ENTER]
O 26 vai para idade e o [ENTER] fica no buffer.
Insira o seu sexto: M - masculino F - feminino:
O scanf() irá verificar o buffer primeiro e encontrará um caractere ‘\n’, que é do tipo char. Como a variável sexo é do tipo char será conveniente pra o sistema armazenar o ‘\n’ na variável o que não “deixará” a leitura ocorrer por parte do usuário.

Basicamente o código ficará assim

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

int main(){

    char nome[60], sexo; /*nome, uma string com 60 posicoes*/
    int idade;

    printf("Insira o seu nome: ");
    scanf("%s", nome);

    printf("Insira sua idade: ");
    scanf("%d%*c", &idade); /*O %*c ira ignorar o ENTER que voce der*/
    printf("Insira o seu sexo: M - masculino F - feminino: ");
    scanf("%c", &sexo);
    if (sexo == 'F' && idade < 25)
        printf("%s: ***ACEITA***", nome);
    else
        printf("%s: ***NAO ACEITA*** ", nome);

    printf("\n\n");
    system("pause");
    return 0;
}
1 curtida

Não há necessidade de usar a função strcmp para comparar uma variável char (char sexo) com um caractere. Pode simplesmente fazer assim

if(sexo == ‘f’ || sexo == ‘F’)

String em C confunde muito. Foi meu calcanhar de Aquiles por um bom tempo e me fez conhecer linguagens como Python e Perl justamente por ser fácil lidar com essas coisas.

Hoje ja me sinto confiante, entretanto Strings tem um aspecto de segurança a ser considerado pois como é um array terminado em \0 vc pode exceder um determinado limite e pode gerar erros difíceis de debugar.

O ideal é sempre verificar o tamanho das strings e usar funções seguras como strncpy strncmp etc (note o n). Mas pra um primeiro projeto de faculdade da pra ignorar isso

Nossaaa, muito obrigada!! Eu estava quebrando a cabeça na parte em que o código tinha que ler o sexo do usuário, não lia por nada, tudo por causa do ENTER kkkk sua dica me salvou!!!

2 curtidas