Ir ao conteúdo
  • Cadastre-se

C Erro no código, ponteiro para a estrutura de dados heterogênea


Posts recomendados

Galeraa eu sou iniciante em programação e estou com um problema nesse exercicio, o que acontece é que na hora de imprimir as variaveis que foram atribuidas aos ponteiros esta imprimindo o endereço e não o valor...podem me ajudar ?? Segue o print. 

Exercício 4:  
Replique o exercício 3. Porém, agora, declare um ponteiro para a estrutura de dados heterogênea. No momento da leitura dos dados e da impressão na tela, use o ponteiro para buscar o conteúdo dos campos. Imprima na tela também o seu RU na tela. 
 

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

struct registro   //iniciando a estrutura de dados e declarando as variaveis
{
    
    int *Rup;
    int Ru;
    char nome[20];
    unsigned char num_ref;


}; struct registro cadastro;

int main() {


    printf("Digite seu nome: ");  //inserindo dados de entrada na string
    fflush(stdin);
    fgets(cadastro.nome, 20, stdin);


    printf("Digite o seu RU: ");
    scanf_s("%d", &cadastro.Ru);

    cadastro.Rup = &cadastro.Ru; //Atribuindo a variavel ao ponteiro

    printf("\n");

    printf("O seu nome e: %s\n", cadastro.nome); //imprimindo na tela os dados de saida da estrutura
    printf("O seu RU e:%d\n", cadastro.Rup);

    system("pause");
    return 0;


}

error.jpg

adicionado 18 minutos depois

Na verdade não esta nem imprimindo o endereço, esta imprimindo um numero aleatório mesmo, eu troquei o printf("O seu RU e:%d\n", cadastro.Rup); por printf("O seu RU e:%p\n", cadastro.Rup); e agora imprimiu o endereço... porém nao é isso que o exercicio pede. 

Link para o comentário
Compartilhar em outros sites

@Leonardo Belizario Consegui resolver dessa forma, ao meu ver, está de acordo com o enunciado:

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

typedef struct registro   //iniciando a estrutura de dados e declarando as variaveis
{

    int *Rup;
    int Ru;
    char nome[20];
    unsigned char num_ref;


}cadastro;



cadastro dados;



int main() {



cadastro *p; //Criei um ponteiro para um tipo cadastro;
p = &dados; //fiz o ponteiro receber o endereço de dados, que é um tipo cadastro.



    printf("Digite seu nome: ");  //inserindo dados de entrada na string
    fflush(stdin);
    scanf("%[^\n]s", p->nome); //A parte "%[^\n]s" lê o conteúdo com espaços, e o a seta serve pra trabalhar com ponteiros.


    printf("Digite o seu RU: ");
    scanf("%d", &p->Ru);

    printf("\n");

    printf("O seu nome e: %s\n", p->nome); //imprimindo na tela os dados de saida da estrutura
    printf("O seu RU e:%d\n", p->Ru);

    system("pause");
    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

Está errando na interpretação do que o enunciado pede para fazer.

 

É para criar um ponteiro que aponta para estruturas do tipo struct registro:

struct registro *ponteiro;

 

E fazê-lo apontar para a variável cadastro (que é um struct registro):

ponteiro = &cadastro;

 

E agora ao invés de acessar os dados da struct diretamente pela variável cadastro (ex: cadastro.Ru) irá acessar os dados através do ponteiro (Ex: ponteiro->Ru).

Link para o comentário
Compartilhar em outros sites

2 minutos atrás, isrnick disse:

Está errando na interpretação do que o enunciado pede para fazer.

 

É criar um ponteiro que aponta para estruturas do tipo struct registro:


struct registro *ponteiro;

 

E fazê-lo apontar para a variável cadastro (que é um struct registro):


ponteiro = &cadastro;

 

E agora ao invés de acessar os dados da struct diretamente pela variável cadastro (ex: cadastro.Ru) irá acessar os dados através do ponteiro (Ex: ponteiro->Ru).


Obrigado, vou reescrever tudo novamente levando isso em consideração. Realmente não estava entendendo nada kkkkk

adicionado 2 minutos depois

@MatheusRFC valeu meu amigo, testarei aqui o código. 

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

@MatheusRFC  Sabe me dizer porque está dando este erro ?

Em 16/10/2019 às 11:37, MatheusRFC disse:

@Leonardo Belizario Consegui resolver dessa forma, ao meu ver, está de acordo com o enunciado:


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

typedef struct registro   //iniciando a estrutura de dados e declarando as variaveis
{

    int *Rup;
    int Ru;
    char nome[20];
    unsigned char num_ref;


}cadastro;



cadastro dados;



int main() {



cadastro *p; //Criei um ponteiro para um tipo cadastro;
p = &dados; //fiz o ponteiro receber o endereço de dados, que é um tipo cadastro.



    printf("Digite seu nome: ");  //inserindo dados de entrada na string
    fflush(stdin);
    scanf("%[^\n]s", p->nome); //A parte "%[^\n]s" lê o conteúdo com espaços, e o a seta serve pra trabalhar com ponteiros.


    printf("Digite o seu RU: ");
    scanf("%d", &p->Ru);

    printf("\n");

    printf("O seu nome e: %s\n", p->nome); //imprimindo na tela os dados de saida da estrutura
    printf("O seu RU e:%d\n", p->Ru);

    system("pause");
    return 0;
}

 

 

Obs : Já mudei para scan_f mas trava e dá outro erro;

 

Gravidade    Código    Descrição    Projeto    Arquivo    Linha    Estado de Supressão
Erro    C4996    'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.    Project42    c:\users\diego\source\repos\project42\project42\origem.cpp    33    
 

Link para o comentário
Compartilhar em outros sites

Consegui !!

 

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

 

typedef struct registro //iniciando a estrutura de dados e declarando as variaveis

{

 

       // int* Rup;

       int Ru;

       char nome[20];

       // unsigned char num_ref;

 

}cadastro;

 

cadastro dados;

 

 

int main() {

 

       cadastro* p; //Criei um ponteiro para um tipo cadastro;

       p = &dados; //fiz o ponteiro receber o endereço de dados, que é um tipo cadastro.

 

 

 

       printf("Digite seu nome: "); //inserindo dados de entrada na string

       fflush(stdin);

       scanf_s("%[^\n]s", p->nome, 20); //A parte "%[^\n]s" lê o conteúdo com espaços, e o a seta serve pra trabalhar com ponteiros.

 

 

       printf("Digite o seu RU: ");

       scanf_s("%d", &p->Ru);

 

       printf("\n");

 

       printf("O seu nome e: %s\n", p->nome); //imprimindo na tela os dados de saida da estrutura

       printf("O seu RU e:%d\n", p->Ru);

 

       system("pause");

       return 0;

}

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!