Ir ao conteúdo

Posts recomendados

Postado

Olá, estou com problemas na parte de calcular os percentuais. O que preciso fazer para calcular o percentual corretamente ?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct entrevistas {
	char sexo [40];
	int idade;
	char fumante [40];
};
int main () {
	int i,total_f,total_homens,homens,total_mulheres, mulheres;
	float perc_f, perc_h,perc_m;
	struct entrevistas pessoas[10];
	FILE *arquivo;
	
arquivo= fopen ("resposta.txt", "w");
if (arquivo ==NULL) {
	printf ("Erro na abertura do arquivo"); 
	}

// armazenando respostas //
for (i=0; i<9; i++) {
	printf ("Digite o seu sexo - F p/ Feminino e M p/ Masculino:");
	scanf ("%s", &pessoas[i].sexo);
	fprintf (arquivo, "%s", pessoas[i].sexo);
	printf ("Digite a sua idade:");
	scanf ("%d", &pessoas[i].idade);
	fprintf (arquivo, "%d", pessoas[i].idade);
	printf ("Eh fumante ? - S p/ Sim e N p/ Nao:");
	scanf ("%s", &pessoas[i].fumante);
	fprintf (arquivo, "%s", pessoas[i].fumante);
}	
// percentual de fumantes em relação ao total //
for (i=0;i<9;i++) {
    if (strcmp(pessoas[i].fumante, "sim") == 0) {
    	scanf ("%i", &total_f);
    	perc_f = total_f * 4/100;
}
	printf ("O percentual de fumantes em relação ao total eh de: %2.f\n ", perc_f);
	
}


// percentual de homens não fumantes abaixo de 40 anos em relação ao total de homens //
for (i=0;i<9;i++) {
	   if (strcmp (pessoas[i].fumante, "nao") ==0) {
          if (pessoas[i].idade < 40) {
          	scanf ("%i", &homens);
          	if (strcmp(pessoas[i].sexo, "masculino")==0) {
		scanf ("%i", &total_homens);
	}
}
}
perc_h = homens * total_homens /100;
}
printf ("O percentual de homens n fumantes abaixo de 40 em relação ao total de homens eh: %2.f \n", perc_h);
    

// percentual de mulheres fumantes acima de 40 anos em relação ao total de mulheres// 
for (i=0;i<9;i++) {
	if (strcmp (pessoas[i].fumante, "sim") == 0) {
	   if (pessoas[i].idade >40) 
	   	scanf ("%i", &mulheres);
		if (strcmp (pessoas[i].sexo, "feminino") ==0 ) {
		scanf ("%i", &total_mulheres);
}
}
perc_m = mulheres * total_mulheres / 100;
}
printf ("O percentual de mulheres fumantes acima de 40 em relação ao total de mulheres eh: %2.f \n", perc_m);

fclose (arquivo);	

return 0;
	
}

 

  • Curtir 1
Postado

1º problema:

Não é necessário usar o operador & no scanf quando se deseja ler uma string (%s).

 

2º problema:

Você pede para o usuário digitar 'S' para sim e 'N' para não. No entanto, quando você está fazendo as comparações da string com strcmp, você compara se o texto é igual a 'sim' e 'nao', sendo que a comparação deveria ser com 'S' e 'N'.

 

Dica: Como você só irá armazenar um único caractere, não é necessário usar um vetor de char, ficando da seguinte forma:

char fumante;
scanf("%c", &fumante);
if(fumante == 'S')
  printf("Fumante!");
else
  printf("Nao fumante!");

 

3º problema:

Caso a comparação com strcmp seja verdadeira, você está lendo um valor inteiro, no entanto, não faz muito sentido. Pode ser um erro de interpretação meu, mas enfim, revise para ver se está correto.

  • Curtir 1
Postado

@iHollyZinhO Referente ao 1º problema, já me falaram sobre não ser necessário usar o operador &, mas preciso para poder armazenar o valor, caso contrário, meu programa não roda.

2º problema: Esqueci de apagar a parte referente  ''s para sim e n para nao''.. Optei por deixar que o usuário digite "sim'' ou ''nao'' mesmo.

28 minutos atrás, iHollyZinhO disse:

char fumante; scanf("%c", &fumante); if(fumante == 'S') printf("Fumante!"); else printf("Nao fumante!");

Se trata de um vetor e uma string, a comparação é utilizada com strcmp.

3º Se a função sctrcmp for verdadeira, ele irá armazenar o valor numa variável do tipo int (exemplo: ele lê quais vetores possuem como resposta feminino p/ sexo e a quantidade é o número total de mulheres)

  • Curtir 1
Postado

O total de fumantes é um número que deve ser calculado, e não lido do arquivo:

// percentual de fumantes em relação ao total //
total_f = 0;
for (i=0;i<10;i++) {
    if (strcmp(pessoas[i].fumante, "sim") == 0) {
    	total_f++;	
	}         
}
perc_f = total_f * 100.0/10;
printf ("O percentual de fumantes em relação ao total eh de: %2.f\n ", perc_f);

Substitua "<9" por menos "<10" no seu código, no laços, pois o seu vetor pessoas possuí dez elementos e não apenas nove.

  • Curtir 1

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!