Doubt: I did not understand why of continuation

Asked

Viewed 281 times

0

Do a program that receives the age, the weight, the height, the color of the eyes (A - Blue, P -Black, V - Green and C - Brown) and the color of the hair (P - Black, C - Brown, L - Blonde and R - Red) of 20 people and that calculates and shows: * the number of persons aged over 50 and weighing less than 60 kg; * the average age of persons under 1,50; * the proportion of persons with blue eyes among all persons tested; * the number of persons with red hair and no blue eyes.

The program asks for age, weight, height, but then it jumps and shows nothing else. What’s wrong?

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

main()
{
int idade,qtd50e60=0,qtd_altura150=0,qtd_olhoazul=0,qtd_cruivas=0,qtd_cpreto=0,qtd_ccastanho=0,qtd_clouro=0,qtd_semazul=0,somaid150=0,i,qtd_olhopreto=0,qtd_olhoverde=0,qtd_olhocastanho=0,qtd_ruivas_naoazuis=0;
float peso, altura, mediaid150,percentolhoazul;
char cor_olho,cor_cabelo;
for(i=1;i<=10;i++)
{
printf("\n Digite a idade:");
scanf("%d",&idade);
printf("\n Digite o peso:");
scanf("%f\n",&peso);
printf("\n Digite a altura:");
scanf("%f",&altura);
printf("\n Informe a cor dos olhos:");
scanf("%c",&cor_olho);
printf("\n Informe a cor dos cabelos:");
scanf("%c",&cor_cabelo);
if(cor_olho=='A' || cor_olho=='P' || cor_olho=='V' || cor_olho=='C')
{
qtd_olhoazul++;
qtd_olhopreto++;
qtd_olhoverde++;
qtd_olhocastanho++;
}
if(cor_cabelo=='P' || cor_cabelo=='C' || cor_cabelo=='L' || cor_cabelo=='R')
{
qtd_cpreto++;
qtd_ccastanho++;
qtd_clouro++;
qtd_cruivas++;
}
if(idade>50 && peso<60)
{
qtd50e60++;
}
if(altura<150)
{
somaid150+=idade;
mediaid150=somaid150/qtd_altura150;
}
}
percentolhoazul=qtd_olhoazul*100/10;
printf("A quantidade de pessoas com idade superior a 50 anos e peso inferior a 60 quilos:%d\n",qtd50e60);
printf("A media das idades das pessoas com altura inferior a 1,50:%f\n",mediaid150);
printf("A percentagem de pessoas com olhos azuis entre todas as pessoas analisadas:%f\n",percentolhoazul);
printf("A quantidade de pessoas ruivas e que nao possuem olhos azuis:%d\n",qtd_ruivas_naoazuis++);
system("pause");


  return 0;
}

2 answers

1

The program has several errors, including logic, I will stick to the most obvious, I will not correct the logic.

First, the data entry:

printf("\n Digite a idade:");  scanf("%d", &idade);
printf("\n Digite o peso:");   scanf("%f", &peso);
printf("\n Digite a altura:"); scanf("%f", &altura);
printf("\n Informe a cor dos olhos:"); scanf(" %c", &cor_olho);
printf("\n Informe a cor dos cabelos:"); scanf(" %c", &cor_cabelo);

The data entry scanf("%f\n",&peso); I had one too many. Color data input needs to be like this scanf(" %c", &cor_olho); with a space before "%c" to consume the n of the previous input.

This logic is wrong:

if (cor_cabelo == 'P' || cor_cabelo == 'C' || cor_cabelo == 'L' || cor_cabelo == 'R')
{
   qtd_cpreto++;
   qtd_ccastanho++;
   qtd_clouro++;
   qtd_cruivas++;
}

because when reading one color you are accounting for all the colors.

This logic will abort the program:

if (altura < 150)
{
   somaid150 += idade;
   mediaid150 = somaid150 / qtd_altura150;
} 

because qtd_altura150 starts with zero and is never incremented, so the division by zero will abort the program.

0

As presented by José X. there are not only errors in the data entry, but also in the logic of the program. You can see an example of the same program in Ideone

Browser other questions tagged

You are not signed in. Login or sign up in order to post.