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

@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






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

×