Ir ao conteúdo

Posts recomendados

Postado

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.

Postado

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);
    }

}

 

Postado

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
  • Membro VIP
Postado

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
Postado

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

  • Membro VIP
Postado

 

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

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 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...