Ir ao conteúdo

C Programa estatistica de candidatos


Ir à solução Resolvido por herbertbahia,

Posts recomendados

Postado

Boa noite, preciso fazer um programa para a faculdade e o enunciado é o seguinte:

Citação

faça um programa que receba o sexo, a idade e a experiência no trabalho (s/n) de 50 candidatos a uma vaga de uma empresa,

calcule e mostre: o número de candidatos.

 

segundo meu professor, eu tenho que usar um for para pegar os dados (idade, sexo e se tem experiência ou não) e apresentar depois como:

 

Citação

candidato 1, sexo: M, idade: 32, Experiência: Não

 

mas usando um for, eu consigo pegar e exibir os dados dos candidatos um por um logo após que o usuario informa aos dados, mas meu professor quer que eu primeiro pego os dados de todos os candidatos para depois informar em forma de lista, como faço isso em C?

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

int main(){
    char experiencia[50][3],sexo[50][3];
    int i,cont=0,idade[50];
    
    for(i=0;i<50;i++){
    	printf ("digite o sexo do candidato %d [m]||[f]:",i+1);
    	fgets(sexo[i],21,stdin);
    	sexo[i][strlen(sexo[i])-1]='\0';
    	printf ("digite o experiencia do candidato %d [s]||[n]:",i+1);
    	fgets(experiencia[i],21,stdin);
    	experiencia[i][strlen(experiencia[i])-1]='\0';
    	cont+=1;
    }
    for(i=0;i<50;i++){
    	printf ("digite a idade do candidato %d:",i+1);
    	scanf ("%d",&idade[i]);
    }
    
    for(i=0;i<50;i++){
        printf("\ncandidato %d sexo : %s\n",i+1, sexo[i]);
        printf("candidato %d experiencia : %s\n",i+1, experiencia[i]);
        printf("candidato %d idade %d\n",i+1, idade[i]);
    }
    printf("\no numero de candidados foram: %d",cont);
}
  

 

  • Confuso 1
Postado

@herbertbahia Funcionou, mas poderia me explicar o código? como disse antes, sou iniciante e não sei o significado e o uso dessa linha por exemplo:

sexo[i][strlen(sexo[i])-1]='\0';

 

adicionado 4 minutos depois

e tem alguma forma de pedir a idade no mesmo for que o sexo e a experiência?

Postado

@Ragnarbrody

O caractere "\0"(null) serve para identificar o fim de uma string, sem o "\0" o C não consegue definir o tamanho de uma string quando estamos fazendo um loop em uma string (que na verdade é um array de chars).

 

7 horas atrás, Ragnarbrody disse:

strlen(sexo[i]

A função strlen() retorna o número de caracteres contidos na string , sem contar com o caractere delimitador \0.

 

7 horas atrás, Ragnarbrody disse:

e tem alguma forma de pedir a idade no mesmo for que o sexo e a experiência?

tem varias

tanto pode definir a idade como string e manter o procedimento, ou entao manter ele int e usar setbuf

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

int main(){
    char experiencia[50][3],sexo[50][3];
    int i,cont=0,idade[50];
    
    for(i=0;i<50;i++){
    	printf ("digite o sexo do candidato %d [m]||[f]:",i+1);
    	fgets(sexo[i],21,stdin);
    	sexo[i][strlen(sexo[i])-1]='\0';
    	printf ("digite o experiencia do candidato %d [s]||[n]:",i+1);
    	fgets(experiencia[i],21,stdin);
    	experiencia[i][strlen(experiencia[i])-1]='\0';
    	printf ("digite a idade do candidato %d:",i+1);
    	scanf ("%d",&idade[i]);
    	setbuf(stdin,NULL);
    	cont+=1;
    }
    
    for(i=0;i<50;i++){
        printf("\ncandidato %d sexo : %s\n",i+1, sexo[i]);
        printf("candidato %d experiencia : %s\n",i+1, experiencia[i]);
        printf("candidato %d idade %d\n",i+1, idade[i]);
    }
    printf("\no numero de candidados foram: %d",cont);
}

 

  • Obrigado 1
Postado

@herbertbahia Obrigado mas outras perguntas se você tiver disponibilidade para responde-las:

 

o que é e para que serve:

 

fgets(sexo[i],21,stdin);

  Para que serve esse 'i' dentro das caixinhas e o ,21?

 

e também, porque na hora de declarar a variavel experiência, porque colocou o [50][3]?

eu entendo que a primeira caixa sirva para limite de caracteres, mas e a segunda?

 

e porque no int idade tem o 50?

 

e porque aqui:

sexo[i][strlen(sexo[i])-1]='\0';

porque tem o -1?

 

 

e o o que o setbuf faz? porque com ele dá pra usar no mesmo for que as strings?

 

me perdoe tantas perguntas, eu realmente quero entender aquilo que estou fazendo, não somente copiar sabe?

  • Solução
Postado
38 minutos atrás, Ragnarbrody disse:

o que é e para que serve:

 


fgets(sexo[i],21,stdin);

  Para que serve esse 'i' dentro das caixinhas e o ,21?

 gets que é um comando muito conhecido para leitura de string da biblioteca padrão do C (stdio) pode gerar um grande problema como essa função não limita o número de caracteres a serem lidos da entrada padrão (stdin), pode haver vazamento de memória, ou até pior, injeção de código malicioso no programa.

notação:

gets( str );

 

A solução é usar fgets, que limita o buffer de leitura.

sua notação:

 

char * fgets (char * string, int tamanho, FILE * fluxo);

mas o que significa isso tudo?

 

string representa Cadeia de caracteres a ser lida que no nosso caso é sexo ou sexo caixinha com i dentro como preferir.

tamanho - Número máximo de caracteres a serem lidos na cadeia de caracteres string que no nossso caso cabe até 21 mas so precisavamos o suficiente para colocar a letra da resposta dentro nem precisava isso tudo kkk.

fluxo - Ponteiro para um objeto FILE que será utilizado como entrada. Para ler da entrada padrão, utilizar stdin como fizemos.

50 minutos atrás, Ragnarbrody disse:

porque na hora de declarar a variavel experiência, porque colocou o [50][3]?

eu entendo que a primeira caixa sirva para limite de caracteres, mas e a segunda?

 

e porque no int idade tem o 50?

eu coloquei [50][3] que representa uma matriz de 50 linhas por 3 colunas ou seja em cada linha vai ficar 1 letra ou palavra armazenada e nois precisamos de 50 que é o total que o exercicio pede. e precisamos de 3 colunas para escrever o que precisamos.

vamos imaginar isto melhor:

exemplo.png.012d39f1972dd7ec1b7c99466b8e261c.png

int idade tem 50 linhas mas nao tem 50 colunas porque como sao apenas numeros podem ser armazenados em um unico vetor

1 hora atrás, Ragnarbrody disse:

e o o que o setbuf faz? porque com ele dá pra usar no mesmo for que as strings?

mas essa mistureba toda de char com int no mesmo laço gera elementos no "buffer" que precisa ser limpo.

então como limpa?

vamos usar uma função que se chama setbuf(stdin, NULL) que traduzindo para portugues significa definir buffer nulo

1 hora atrás, Ragnarbrody disse:

porque tem o -1?

para o \0 ficar no final.

tambem sou estudante ainda mas espero que posso ter te ajudado.

  • Obrigado 2
Postado
2 horas atrás, Ragnarbrody disse:

porque do i na caixinha

esse é o laço principal do seu programa 

for(i=0;i<50;i++)

 

imagina se eu não uso o [ i ]

fgets(sexo,21,stdin);

scanf("%d,&idade);

nesse caso eles nao entrariam no vetor por isso se usa o  [ i ]


afinal eu declarei assim: 

char sexo[50][3];  int idade[50];

e não assim:  int idade;  char sexo;

 

 

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...