Ir ao conteúdo
  • Cadastre-se

Erros!


davidecom

Posts recomendados

Olá galera, estou aprendendo struct, e to tentando fazer um codigo para armazenar dados de 500 habitantes de uma cidade e calcular a media dos salarios dos habitantes.

Codigo \/

#include <stdio.h>

typedef struct estrutura_de_dados

{

int id, nfilhos;

char sexo[20];

double salario;

}EdD;

void armazena(EdD info[500])//Procedimento para armazenar dados.

{

int i;

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

{

printf("\nInsira a iadade do habitante: ");

scanf("%d", &info.id);

printf("\nInsira o sexo do habitante: ");

fgets(info.sexo, 20, stdin);

printf("\nInsira o salário do habitantes: ");

scanf("%lf", &info.salario);

printf("\nInsira o numero de filhos do usuario: ");

scanf("%d", &info.nfilhos);

fflush(stdin);

}

}

float smedia(EdD info)//Função que retorna a media dos salarios.

{

int i;

double acum;

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

acum += info.media;

return acum/500;

}

int main()

{

int m;

EdD informações;

armazena(informações);

m = media(informações);

printf("\nMedia dos salarios dos habitantes:\nR$: %.2lf", m);

return 0;

}

Alguem sabe me dizer os erros?

Agradeço desde já!:D

Link para o comentário
Compartilhar em outros sites

Você declarou


EdD informações;

ou seja, há apenas uma estrutura. Você não pode tratar como um vetor de 500 estruturas neste caso.

A declaração correta seria


EdD informações[500];

Então, na função 'smedia()', você deveria receber o parâmetro como um vetor:


float smedia(EdD info[]){

Ainda na função 'smedia()', você não pode considerar que o compilador inicializou a variável 'acum' com zero. Além disso, neste caso é preferível usar float. Double ocupa mais espaço e neste caso, float da conta do recado (o mesmo vale para o elemento 'salario' dentro da struct).

Isso aqui também está errado:


acum += info[i].media;

Não há nenhum elemento chamado 'media' dentro da struct. Se você se refere ao salário, deve usar a palavra 'salario', que é o nome da variavel:


acum += info[i].salario;

Na chamada da função 'smedia()', você está chamando 'media()', que não existe. Além disso, você atribui o resultado da função para 'm', que é uma variável inteira. As chances de retornar um float são 100%, então atribua á um float. Acerte para


int main(){
float m;
EdD informações[500];

armazena(informações);
m = smedia(informações);
printf("\nMedia dos salarios dos habitantes:\nR$: %.2lf", m);
return 0;
}

Acho que é isso.

Link para o comentário
Compartilhar em outros sites

Colocar o fflush no começo do laço irá limpar o buffer, porém, o printf irá colocar coisas no buffer novamente. Você deve colocar o fflush entre a leitura de idade e sexo:


printf("\nInsira a iadade do habitante: ");
scanf("%d", &info[i].id);
fflush(stdin);
printf("\nInsira o sexo do habitante: ");
fgets(info[i].sexo, 20, stdin);

Link para o comentário
Compartilhar em outros sites

Só lembrando que o certo mesmo é ir dando getchar() até pegar algo que não seja espaço em branco e aí sim dar um ungetch(c, stdin) para fazer a leitura, pois fflush só deveria ser usado em streams de saída, em streams de entrada o comportamento é indefinido. Logo:


/* Supõe-se que usuário inclui <ctype.h> e <stdio.h> e declara int c */
while ( isspace( c = getchar()) ) ; /*lê espaços até encontrar algo diferente disso */
ungetch(c, stdin); /* coloca caractere lido de volta na stream */

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!