Ir para conteúdo

POWERED BY:

Arquivado

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

MarioLuiz1992

Programação em C, Structs passagem por parametro...

Recommended Posts

Senhores, estou com um erro em meu programa e não consigo identificar aonde, na execução no cmd o erro persiste... O objetivo do programa é criar uma função para receber os dados e imprimir os dados em outra função usando struct ..

#include <stdio.h>
#include <strings.h>
#include <string.h>

typedef struct{
char nome[50],cor[50];
int idade;
float altura,peso;
}PESSOA;

int main(void)
{
int gravapessoa(PESSOA *pess[3]);
int imprimepessoa(PESSOA pe[3]);

    int gravapessoa();
    int imprimepessoa();
    PESSOA pes[3];
    gravapessoa(&pes);
    imprimepessoa(pes);

return 0;
}

int gravapessoa(PESSOA *pess[3])
{
    int i;
    for (i=0;i<3;i++)
    {
    printf("\nDigite o nome da pessoa: ");
    gets(pess[i]->nome);

    printf("\nDigite a cor da pessoa: ");
    gets(pess[i]->cor);

    printf("\nDigite a idade da pessoa: ");
    scanf("%d", &pess[i]->idade);

    printf("\nDigite a altura da pessoa: ");
    scanf("%f", &pess[i]->altura);

    printf("\nDigite o peso da pessoa: ");
    scanf ("%f", &pess[i]->peso);

    
    }
}

int imprimepessoa(PESSOA pe[3])
{
    int i;
    for (i=0;i<3;i++)
    {
        printf("\nO %d§ Cadastro contem os seguintes dados... nome: %s\tcor: %s\tidade: %d\taltura: %f\tpeso: %f ",i,pe[i].nome,pe[i].cor,pe[i].idade,pe[i].altura,pe[i].peso);
    }

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

O programa compila corretamente, preencho o cadastro , mas na hora da impressão dos dados ele imprime caracteres desconhecidos

ai o programa da erro...

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 gets(pess[i]->cor);

 

Não use isso.

 

Por que os métodos retornam int e estão sem o return?

 

Os argumentos das funções são arrays bidimensionais ao invés de arrays simples. A menos que vc queira gravar uma MATRIZ de estruturas, isso está estranho.

 

Provavelmente está imprimindo lixo porque vc está lendo além da memória ou a string não tem o \0.

Compartilhar este post


Link para o post
Compartilhar em outros sites

_Isis_, realmente... Estava tudo errado :unsure: ...Estava mesmo imprimindo lixo na memória, estudei mais um pouco e perguntei aos meus professores na faculdade... Arrumei o código e ele esta funcionado corretamente, muito obrigado pela ajuda e dicas :D . Segue novo código:

#include <stdio.h>
#include <strings.h>
#include <string.h>

typedef struct{
char nome[50],cor[50];
int idade;
float altura,peso;
}PESSOA;

int main()
{
void gravapessoa(PESSOA pess[2]);
void imprimepessoa();

    PESSOA pes[2];

    void gravapessoa(PESSOA pess[2]);
    void imprimepessoa();

    gravapessoa(&pes);
    imprimepessoa(pes);

return 0;
}

void gravapessoa(PESSOA pess[2])
{
    int i;
    for (i=0;i<2;i++)
    {
    printf("\nDigite o nome da pessoa: ");
    gets(pess[i].nome);

    printf("Digite a cor da pessoa: ");
    gets(pess[i].cor);

    printf("Digite a idade da pessoa: ");
    scanf("%d", &pess[i].idade);

    printf("Digite a altura da pessoa: ");
    scanf("%f", &pess[i].altura);

    printf("Digite o peso da pessoa: ");
    scanf ("%f", &pess[i].peso);

    fflush(stdin);
    }
}

void imprimepessoa(PESSOA pe[2])
{
    int i;
    for (i=0;i<2;i++)
    {
        printf("\n\nO %d§ Cadastro contem os seguintes dados... \nnome: %s\ncor: %d\nidade: %d\naltura: %.2f\npeso: %.2f ",i+1,pe[i].nome,pe[i].cor,pe[i].idade,pe[i].altura,pe[i].peso);
    }

}

Até mais :thumbsup:...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.