Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

shadowam

Mostrar os cadastros

Recommended Posts

Prezados, sou iniciante em C e estou aprendendo um pouco de struct agora, mas em um dos meus primeiros programas está ocorrendo um erro que não consigo encontrar a solução. Deve ser algo muito simples mas que não aprendi.

 

O problema é que no final do programa, para 'mostrar os cadastros', a variável NOME sempre sai com os valores da DATAEXP, e não sei como resolver isso... Se puderem ajudar ficarei grato! Abaixo seguem o código e uma foto do problema.

#include <stdio.h>
#include <stdlib.h>
 
// Criar um registro do cadastro de 10 alunos com o nome, número,
// rg e data de nascimento e apresentar o resultado.
 
int main()
{
    int i;
    struct rg{
        int num;
        char dataexp;
        char nome[50];
        char nasc[50];
        char natur[50];
        char nomemae[50];
        char nomepai[50];
    };
 
    struct rg cad [2]; //fazendo com 2 para testar
 
    for (i=0;i<2;i++)
    {
        printf("\n*** Cadastro do %d RG ***\n", i+1);
 
        printf("\nInforme o nome: ");
        gets(cad[i].nome);
 
        printf("\nInforme o numero do RG: ");
        scanf("%d%*c", &cad[i].num);
 
        printf("\nInforme a data de expedicao: ");
        gets(&cad[i].dataexp);
 
        printf("\nInforme a data de nascimento: ");
        gets(cad[i].nasc);
 
        printf("\nInforme o nome da mae: ");
        gets(cad[i].nomemae);
 
        printf("\nInforme o nome do pai: ");
        gets(cad[i].nomepai);
    }
 
    printf("\n****************************************");
    printf("\n*** Cadastros efetuados com sucesso! ***");
    printf("\n****************************************\n");
 
    for (i=0;i<2;i++)
    {
        printf("\nNome: %s", &cad[i].nome);
        printf("\nRG Numero: %d", cad[i].num);
        printf("\nData de expedicao: %s", &cad[i].dataexp);
        printf("\nData de nascimento: %s", &cad[i].nasc);
        printf("\nNome da mae: %s", &cad[i].nomemae);
        printf("\nNome do pai: %s\n", &cad[i].nomepai);
    }
 
    getch();
    return 0;
 
}
537fe89797966.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, o seu problema está na declaração de

char dataexp

logo em seguida vc declara

char nome[50]

 

O que acontece é que sua variável dataexp tem capacidade de armazenar apenas 1 caracter, imagine que com esta declaração essa variável seja alocada no endereco 0x000031.

 

Logo sua variável nome que pode armazenar 50 caracteres, é alocada ao lado de 0x000031(dataexp) com endereco 0x000032 e o endereço final 0x000082(0x000032 + 50), então quando você pegar uma cadeia de caracteres com gets, como a data 10/10/2005, o 10/10/2005 é armezenado na variável dataexp e o restante "ultrapassa o limite" e invade o espaço da variável nome que tbm contém o '\0' para finalizar a leitura;

 

Veja que sua saida da variável nome não exibe o primeiro valor, pois a leitura começa em 0x000032(espaço de nome);

 

seu problema será resolvido se vc definir dataexp com mais espaço, ou seja, 8.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado Talisson! Sabia que era algo simples mas não consegui encontrar, ficava olhando todo o código e esqueci de verificar as variáveis, hehe. Agora funcionou direitinho, obrigado pela ótima explicação!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.