utilizar Struct em função

1. utilizar Struct em função

Mateus
mate1992

(usa Outra)

Enviado em 07/06/2011 - 15:54h

Olá, estou com problemas para utilizar uma função para cadastrar e imprimir dados de uma Struct, porém meu código está dando erro ao passar as variáveis como parâmetro para as funções. Será que alguém poderia me dar uma ajuda?
Desde já muito obrigado!


//Programa usando struct que recebe o nome, id e valor da compra do cliente
#define MAX 4
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct {
char nome[20];
int id;
float compra;
}cadastro;
float recebedados(cadastro vet[MAX]) {
int i;
for (i=1;i<MAX;i++) {
printf("Digite o nome do %d cliente\n",i);
scanf("%s",vet[i].nome);
printf("Digite o id do %d cliente\n",i);
scanf("%d",&vet[i].id);
printf("Digite o valor da compra do %d cliente\n",i);
scanf("%f",&vet[i].compra);
}
}
void imprime (cadastro vet[MAX]) {
int i;
for (i=1;i<MAX;i++) {
printf("Nome do cliente : %s\n",vet[i].nome);
printf("ID :%d\n",vet[i].id);
printf("Valor da Compra: %f\n",vet[i].compra);
printf("/n");
}
}

int main() {
cadastro vet[MAX];
int i;
recebedados(vet[MAX]);
imprime(vet[MAX]);
}



  


2. Re: utilizar Struct em função

cr0n
_di0

(usa FreeBSD)

Enviado em 08/06/2011 - 03:43h

Veja o laço for

for (i=1;i<MAX;i++)

Ou seja, havéra uma contagem iniciada de 1 e terminará em 3, que é menor do que 4(valor de MAX)

Pois bem, note que você começa a contagem dos elementos, já à partir do número 1, o qual representa o índice 1.

Veja no exemplo o que isso quer dizer e quais as consequências:

______________________________________________________________________
v[0] --> nome, id e valor de compra do primeiro cliente
v[1] --> nome, id e valor de compra do segundo cliente
v[2] --> nome, id e valor de compra do terceiro cliente
v[3] --> nome, id e valor de compra do quarto cliente
v[4] --> "Lixo da memória(endereço de memória qualquer)
V[5] --> "Lixo da memória(endereço de memória qualquer)
_______________________________________________________________________

Quando é iniciado o laço for, ele irá ler o campo v[1], que é o valor inicial da variável i(i=1), seguindo seu fluxo, lerá v[2],v[3], v[4]

Com o exemplo acima, já deu pra notar que houve dois problemas.

Primeiro que ele deixou de ler o valor do índice v[0], que contém os dados
do primeiro cliente, e o segundo problema, é que ele leu o índice v[4], retornando assim, "sujeiras".
Como é de conhecimento agora, isso causará portanto, resultados incorretos
em seu programa.

Um outro pequeno problema que pude notar, está nesse fragmento do código:

printf("\n");

Acredito que houve desatenção em sua parte. Use a barra comum, para dizer ao programa que solicita nova linha.

E por fim, também notei as seguintes entradas:


recebedados(vet[MAX]);
imprime(vet[MAX]);


Os dados passados do tipo vetor, são sempre passados como referência. devido a natureza de como a memória opera. Se estiver interessado no motivo, pesquise no GOOGLE. Mas já adianto a maneira correta de se passar os valores acima.

recebedados(vet);
imprime(vet);

Abraços.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts