Ir ao conteúdo
  • Cadastre-se
UmPrograma

C Funcao que imprimi struct

Recommended Posts

Olá, amigos. Como vão?

 

Estava aqui programando e tentei fazer um programinha que fosse dividido em partes (meu conceito de funcao, ahaha).

So que nao estou conseguindo fazer com que a funcao imprima a estrutura.

 

Segue como ficou a funcao registro o e de imprimir;

 

void registro(int e){
struct gente aaa[e];
int i ;
    for(i=0;i<e;i++){
        printf("Informe o sexo: ");
        scanf("%s%*c", &aaa[i].sexo);
        printf("Informe a cor dos olhos: ");
        scanf("%s%*c", &aaa[i].cor);
        printf("Informe a cor do cabelo: ");
        scanf("%s%*c", &aaa[i].cabelo);
        printf("Informe a idade: ");
        scanf("%d%*c", &aaa[i].id);
    }
}
void imprimir(struct gente *aaa, int e){
    int i;
    printf("Fique agora com os dados das pesquisas.\n\n");
    for(i=0;i<e;i++){
        printf("A pessoa do sexo %s, ",aaa[i].sexo);
        printf("tem os olhos %s, ",aaa[i].cor);
        printf("tem os cabelos %s, ", aaa[i].cabelo);
        printf("tem a idade de %d anos.\n\n", aaa[i].id);
    }

}

Só na hora de imprimir que esta aparecendo lixo de memoria.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde.

Onde está a struct?

 

adicionado 0 minutos depois

https://www.inf.pucrs.br/~pinho/LaproI/Structs/Structs.htm

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aqui esta o codigo:

 

#include <stdio.h>
#include <stdlib.h>
struct gente{
    char sexo[11];
    char cor[11];
    char cabelo [11];
    int id;
};
main(){
    int e, *a;

    printf("Informe a quantidade de pessoas que passaram pela pesquisa.\n");
    scanf("%d", &e);

    a=&e;

struct gente aaa;

void registro(int e);
registro(e);

void imprimir(struct gente *aaa, int e);
imprimir(&aaa, e);

}/*
struct gente{
    char sexo[11];
    char cor[11];
    char cabelo [11];
    int id;
};*/
void registro(int e){
struct gente aaa[e];
int i ;
    for(i=0;i<e;i++){
        printf("Informe o sexo: ");
        scanf("%s%*c", &aaa[i].sexo);
        printf("Informe a cor dos olhos: ");
        scanf("%s%*c", &aaa[i].cor);
        printf("Informe a cor do cabelo: ");
        scanf("%s%*c", &aaa[i].cabelo);
        printf("Informe a idade: ");
        scanf("%d%*c", &aaa[i].id);
    }
}
void imprimir(struct gente *aaa, int e){
    int i;
    printf("Fique agora com os dados das pesquisas.\n\n");
    for(i=0;i<e;i++){
        printf("A pessoa do sexo %s, ",aaa[i].sexo);
        printf("tem os olhos %s, ",aaa[i].cor);
        printf("tem os cabelos %s, ", aaa[i].cabelo);
        printf("tem a idade de %d anos.\n\n", aaa[i].id);
    }

}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

você declarou aaa como uma estrutura e não como um vetor de estruturas.

deveria fazer assim

 

struct gente aaa[e];

 

adicionado 1 minuto depois

ops, acho que li o codigo de maneira errada, perai

adicionado 8 minutos depois

mexi no seu código e agora parece que rodou

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

struct gente {
    char sexo[11];
    char cor[11];
    char cabelo [11];
    int id;
};

void registro(struct gente *aaa, int e) {
    int i;
    for(i = 0; i < e; i++) {
        printf("Informe o sexo: ");
        scanf("%s%*c", &aaa[i].sexo);
        printf("Informe a cor dos olhos: ");
        scanf("%s%*c", &aaa[i].cor);
        printf("Informe a cor do cabelo: ");
        scanf("%s%*c", &aaa[i].cabelo);
        printf("Informe a idade: ");
        scanf("%d%*c", &aaa[i].id);
    }
}

void imprimir(struct gente *aaa, int e){
    int i;
    printf("Fique agora com os dados das pesquisas.\n\n");
    for(i=0;i<e;i++){
        printf("A pessoa do sexo %s, ",aaa[i].sexo);
        printf("tem os olhos %s, ",aaa[i].cor);
        printf("tem os cabelos %s, ", aaa[i].cabelo);
        printf("tem a idade de %d anos.\n\n", aaa[i].id);
    }
}

void main() {
    int e, *a;
    printf("Informe a quantidade de pessoas que passaram pela pesquisa.\n");
    scanf("%d", &e);
    a = &e;
    struct gente aaa[e];
    registro(aaa, e);
    imprimir(aaa, e);
}

 

adicionado 11 minutos depois

na verdade não entendi porque você criou o ponteiro para inteiro a, ele não foi usado no código

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

 

Adendo inicial: é recomendado que o código sempre fique indentado, ex.:

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

struct gente {
    char sexo[11];
    char cor[11];
    char cabelo [11];
    int id;
};

main() {
    int e, *a;

    printf("Informe a quantidade de pessoas que passaram pela pesquisa.\n");
    scanf("%d", &e);
    a=&e;
    struct gente aaa;	
    void registro(int e);
    registro(e);	
    void imprimir(struct gente *aaa, int e);
    imprimir(&aaa, e);	
}

/*
    struct gente {
        char sexo[11];
        char cor[11];
        char cabelo [11];
        int id;
    };
*/

void registro(int e) {
    struct gente aaa[e];
    int i ;
    for(i=0;i<e;i++) {
        printf("Informe o sexo: ");
        scanf("%s%*c", &aaa[i].sexo);
        printf("Informe a cor dos olhos: ");
        scanf("%s%*c", &aaa[i].cor);
        printf("Informe a cor do cabelo: ");
        scanf("%s%*c", &aaa[i].cabelo);
        printf("Informe a idade: ");
        scanf("%d%*c", &aaa[i].id);
    }
}

void imprimir(struct gente *aaa, int e) {
    int i;
    
    printf("Fique agora com os dados das pesquisas.\n\n");
    for(i=0;i<e;i++) {
        printf("A pessoa do sexo %s, ",aaa[i].sexo);
        printf("tem os olhos %s, ",aaa[i].cor);
        printf("tem os cabelos %s, ", aaa[i].cabelo);
        printf("tem a idade de %d anos.\n\n", aaa[i].id);
    }
}

 

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@alecounter

 

O que que voce mexeu, para me situar?

 

Alem do :

15 minutos atrás, alecounter disse:

struct gente aaa[e];

 

Sobre o ponteiro, eu ia utilizar ele, ai vi que nao era necessario e que tava esquentando cabeca à toa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Além da questão do vetor:

12 minutos atrás, alecounter disse:

struct gente aaa[e];

 

Tem a questão do escopo, ou seja, a variável foi criada dentro da função main(). Mas ai, em registro() está criando OUTRA variável... ou seja, a variável onde os dados foi cadastrado só existe no escopo do registro().. será perdida!!

 

 

RESUMINDO

Tem pelos menos duas formas para corrigir...: ou crie um único vetor em escopo global (antes do main()), ou passa o vetor via parâmetro em registro()... (assim como passou para imprimir())...

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 minuto atrás, Josesousa disse:

@alecounter

 

O que que voce mexeu, para me situar?

 

Alem do :

 

Sobre o ponteiro, eu ia utilizar ele, ai vi que nao era necessario e que tava esquentando cabeca à toa.

bom, eu reparei que você declarou o vetor de estrutura gente dentro da função registro, do jeito que você fez ela seria perdida, o certo seria você declarar assim:

 

static struct gente aaa[e];

pois dessa forma esse vetor não seria perdido quando a função deixasse de executar. mas eu particularmente não gosto de fazer assim, então declarei esse vetor dentro de main e coloquei todas as outras funções para cima de main, pra não precisar fazer apenas a declaração das mesmas.

  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×