Doubt: I did not understand the reason for the continuation

0

Make a program that receives the age, weight, height, color of the eyes (A - Blue, P - Green, V - Green and C - Brown, L - Blonde and R - Red) of 20 people and calculate and show: * the number of people over 50 years old and weighing less than 60 kilos; * the average age of people with a height of less than 1.50; * the percentage of people with blue eyes among all people analyzed; * the amount of redhead people who do not have blue eyes.

The program asks for age, weight, height, but then it jumps and shows no more. 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;
}
    
asked by anonymous 12.10.2016 / 23:51

2 answers

1

The program has several errors, including logic, I will stick to the most obvious ones, 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);

Data entry scanf("%f\n",&peso); had an '\ n' more. The color data entry must therefore be scanf(" %c", &cor_olho); with a space before "% c" to consume the \ n 'of the previous entry.

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 you read a color you're counting for all 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 division by zero will abort the program.

    
13.10.2016 / 00:29
0

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

    
13.10.2016 / 00:58