Ir ao conteúdo
  • Cadastre-se
Estudante0123

C Programa não compila, erro com structs e ponteiros

Recommended Posts

Primeira vez que eu estou tentando montar um codigo com struct e ponteiros. Fiz todo o codigo pela logica, mas ele não compila. Pode ser que tenha erro na logica na hora de montar ou erros de escrita mesmo, não sei identificar.

O codigo tem o seguinte proposito : Preencher um struct com dados do usuario, depois apresentar eles na tela (cada um desses procedimentos feito por funçoes diferentes).

#include <stdio.h>

struct dados {
         char nome [100];
         int ano;
         int num;
         int pref [50];
     };
     
 int main ()
 
     
     struct preencher (struct dados x);
     struct dados caso1, caso2;
     int *p;
     
     preencher (struct dados caso1);
     
    struct dados ler (struct dados x);
    
    dador ler (struct dados p);
     
     return 0;
 }

struct dados preencher (struct dados x, *p){
    printf ("Digite o nome\n");
    scanf ("%c", &x.nome);
    printf ("Digite o ano");
    scanf ("%i", &x.ano);
    printf ("Digite a quantidade de numeros");
    scanf ("%i", x.num);
    for (int i=0; i<x.num; i++){
    printf ("Digite os numeros");
    scanf ("%i", &x.pref[i]);
    }
    
    p = &x;
};

struct dados ler (struct dados x){
    printf ("O nome é: ", x.nome);
    printf ("O ano é: ", x.ano);
    printf ("A quantidade de numeros e: ", x.num);
    for (int i=0; i<x.num; i++){
    printf ("O numeros: ", x.pref[i]);
    }
    
};

Alguém poderia me dizer onde estão os erros?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

@Estudante0123  Olá. Por se tratar do primeiro exercício referente a struct e ponteiros recomendo, a princípio, fazer uma exercício mais simples.

Outro ponto: Para o código abaixo, é preciso fazer a alocação dinâmica do ponteiro *p, senão não vai ser possível a leitura dos dados

Segue o código e vê se ajuda (não entendi o q você quis fazer com "quantidade":

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

struct dados {
    char nome [100];
    int ano;
    int num;
    int pref [50];
};

int main() {

    struct dados *p = NULL;

    // alocacao para o ponteiro p
    p = (struct dados *) malloc(sizeof(struct dados));

    printf ("Digite o nome: ");
    scanf ("%s", p->nome);
    fflush(stdin); // para limpar a sujeira do buffer

    printf ("Digite o ano: ");
    scanf ("%d", &p->ano);
    fflush(stdin);

    printf ("Digite a quantidade de numeros: ");
    scanf ("%d", &p->num);
    fflush(stdin);

    printf ("\nO nome e: %s\n", p->nome);
    printf ("O ano e: %d\n", p->ano);
    printf ("A quantidade de numeros e: %d\n\n", p->num);

    // libera a memória do ponteiro p que foi alocado
    free(p);

    // faz p apontar para nenhum lugar
    p = NULL;

    return 0;
}

 

adicionado 2 minutos depois

A princípio procure entender o que foi feito nesse código para depois fazer uso de funções e outros recursos

adicionado 15 minutos depois

Outro ponto: Se o teu interesse, como demonstrou ser, é de trabalhar com ponteiros, cedo ou tarde você vai ter q aprender sobre alocação dinâmica de memória.

Se deu pra entender o código q passei ok! Se ficou alguma dúvida fique a vontade para perguntar

  • Curtir 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

×