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>intmain(){charnome,sexo;intidade;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");return0;}
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>intmain(){charnome[60],sexo;/*nome, uma string com 60 posicoes*/intidade;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);elseprintf("%s: ***NAO ACEITA*** ",nome);printf("\n\n");system("pause");return0;}
R
raviassis
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’)
…
P
peczenyj
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
G
Giovana_Parpinelli2 likes
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!!!