Ir ao conteúdo
  • Cadastre-se

C Armazenar valor em um Ponteiro de Struct


aender
Ir à solução Resolvido por Ansi C,

Posts recomendados

Bom dia Pessoal. Estou com uma dúvida  sobre ponteiros para Struct.

Criei uma Struct e um ponteiro para essa struct, e preciso armazenar um dado inteiro digitado pelo usuário em uma variável também desse tipo struct , depois copiar o valor digitado para o ponteiro, e  imprimir esse valor. Mas quando tento imprimir o ponteiro com o resultado, só é retornado  o endereço, ou lixo, não o valor.  

#include<stdio.h>

//Criaçao do  Registro (Struct) para armazenar os dados do aluno: Nome do Aluno e identificador RG

 typedef  struct
    {
        char nome_aluno[20];   //Variável char que armazena o nome do aluno
        int id_aluno;         // variavel int que armazena o RR do aluno

    }dados_aluno; //Nome da Estrutura

//Programa Principal
 int main(void)
{
    dados_aluno nome;  //Varável do tipo dados_aluno
    dados_aluno RG;    //Variável do tipo dados_aluno
    dados_aluno *ponteiro; //Ponteiro para a Struct dados_aluno


    printf("Digite o nome do Aluno:  ");
    fgets(nome.nome_aluno,40,stdin); //Leitura do nome do Aluno
    printf("Digite o RG  do Aluno:  ");
    scanf("%d",&RG.id_aluno); //Leitura do RG do Aluno

    ponteiro = &RG.id_aluno; //Atribui o valor lido do teclado Da variável RG ao ponteiro

    printf("-------------------------------------------\n");
    printf("Nome do Aluno: %s",nome.nome_aluno);            //Imprime o nome do Aluno
    printf("RG do Aluno: %d\n ",RG.id_aluno);               //Imprime o Rg do aluno
    printf("-------------------------------------------\n");
    printf("Ponteiro = %d",*ponteiro);                    //Imprime o valor armazenado no ponteiro

    return 0;
}

 

Exemplo de Saída do Programa :

 

 

Digite o nome do Aluno:  Marcelo silva
Digite o RG  do Aluno:  23456789
-------------------------------------------
Nome do Aluno: Marcelo silva
RG do Aluno: 23456789
 -------------------------------------------
Ponteiro = 6422000 // Não retorna o valor copiado da variável RG
Process returned 0 (0x0)   execution time : 27.095 s
Press any key to continue.


Pessoal, desde já agradeço pela ajuda.

 

Link para o comentário
Compartilhar em outros sites

  • Solução

A estrutura  'dados_aluno' é uma abstração [concepção da inteligência] de aluno no sistema, logo uma variável dessa chamada por RG ou NOME não tem sentido, e sabemos que esses nomes são elementos [ou campos] do tipo abstrato de dados em questão. Tudo torna essa escolha inadequada e desperdício de memória porque objetivou um campo da estrutura.

 

Corrigido

#include<stdio.h>

//Criaçao do  Registro (Struct) para armazenar os dados do aluno: Nome do Aluno e identificador RG

struct Dados_Aluno { //Nome da Estrutura 
   char  nome [20];   //Variável char que armazena o nome do aluno
   int   identificacao; // variavel int que armazena o RR do aluno

};

//Programa Principal
 int main(void) {
    struct Dados_Aluno  aluno;  //Varável do tipo [abstrato] dados_aluno
    struct Dados_Aluno  *ponteiro; //Ponteiro para a Struct  dados_aluno


    printf("Digite o nome do Aluno:  ");
    fgets(aluno.nome, 40, stdin); //Leitura do nome do Aluno
   
    printf("Digite o RG  do Aluno:  ");
    scanf("%d", &aluno.identificacao); //Leitura do RG do Aluno

    ponteiro = &aluno; //Atribui o valor lido do teclado Da variável RG ao ponteiro

    printf("-------------------------------------------\n");
    printf("Nome do Aluno: %s", aluno.nome); //Imprime o nome do Aluno
    printf("RG do Aluno: %d\n ", aluno.identificacao); //Imprime o Rg do aluno
    printf("-------------------------------------------\n");
    printf("Ponteiro = %s", ponteiro); //Imprime o valor armazenado no ponteiro

    return 0;
}

 

8 horas atrás, aender disse:

Ponteiro = 6422000 // Não retorna o valor copiado da variável RG

O ponteiro [O endereço] de um tipo abstrato de dados é o endereço do primeiro campo dessa estrutura, e sabemos que nesse caso é a 'string' nome e não rg/identificacao

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Em 04/04/2021 às 19:16, mauro_b disse:

A estrutura  'dados_aluno' é uma abstração [concepção da inteligência] de aluno no sistema, logo uma variável dessa chamada por RG ou NOME não tem sentido, e sabemos que esses nomes são elementos [ou campos] do tipo abstrato de dados em questão. Tudo torna essa escolha inadequada e desperdício de memória porque objetivou um campo da estrutura.

 

Corrigido


#include<stdio.h>

//Criaçao do  Registro (Struct) para armazenar os dados do aluno: Nome do Aluno e identificador RG

struct Dados_Aluno { //Nome da Estrutura 
   char  nome [20];   //Variável char que armazena o nome do aluno
   int   identificacao; // variavel int que armazena o RR do aluno

};

//Programa Principal
 int main(void) {
    struct Dados_Aluno  aluno;  //Varável do tipo [abstrato] dados_aluno
    struct Dados_Aluno  *ponteiro; //Ponteiro para a Struct  dados_aluno


    printf("Digite o nome do Aluno:  ");
    fgets(aluno.nome, 40, stdin); //Leitura do nome do Aluno
   
    printf("Digite o RG  do Aluno:  ");
    scanf("%d", &aluno.identificacao); //Leitura do RG do Aluno

    ponteiro = &aluno; //Atribui o valor lido do teclado Da variável RG ao ponteiro

    printf("-------------------------------------------\n");
    printf("Nome do Aluno: %s", aluno.nome); //Imprime o nome do Aluno
    printf("RG do Aluno: %d\n ", aluno.identificacao); //Imprime o Rg do aluno
    printf("-------------------------------------------\n");
    printf("Ponteiro = %s", ponteiro); //Imprime o valor armazenado no ponteiro

    return 0;
}

 

O ponteiro [O endereço] de um tipo abstrato de dados é o endereço do primeiro campo dessa estrutura, e sabemos que nesse caso é a 'string' nome e não rg/identificacao

@mauro_b  Isso mesmo, eu estava cometendo uma confusão grande aqui rsrs, e consegui entender com sua explicação. Obrigado também por corrigir o código, compilei e ficou certinho. Muito obrigado mesmo pela disponibilidade em ajudar. Grande abraço. 

Link para o comentário
Compartilhar em outros sites

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