Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Josesousa

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

}

 

Editado por Josesousa
Inserir o codigo

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

Ah sim, verdade. 

 

Mudei meu codigo aqui. Valeu......

 

:D:thumbsup:

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






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

×