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;
}
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;
}
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!!!