Ir para conteúdo
Fórum Script Brasil

rpmarques

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Sobre rpmarques

rpmarques's Achievements

0

Reputação

  1. Olá, sou iniciante na linguagem C e comeceia usar ponteiros recentemente. Poderiam me ajudar com os eguinte código, no momento em que chama o metodo faz() para imprimir o codigo de uma struct que está pontada por um ponteiro está imprimindo um valor incorreto. Mas é impresso correto se eu imprimir no método main(). Estou quebrando a cabeça para descobrir o porque disso: #include <stdio.h> #include <stdlib.h> int verifica(int codigo); void incluir(); void faz(); struct livro *ptPrimeiro; struct livro *ptUltimo; #define TAM 10; int numEl = 0; struct info{ char val[100]; }; struct livro{ //indices = 0-codigo 1-titulo 2-autor 3-editora 4-cidade int codigo; struct info inf[5]; struct livro *ptAntLivro; struct livro *ptProxLivro; }; int main() { int opcao = 0; while(1){ printf("\n1- Cadastrar um livro\n2- Remove livro\n3- Lista livros"); printf("\nDigite sua opcao: "); scanf("%d", &opcao); switch(opcao){ case 1: incluir(); break; case 2: break; case 3: faz(); } //AQUI FUNCIONA, IMPRIME CORRETO O VALOR printf("\nsegundo testeFIM: %d", (*ptUltimo).codigo); } } void incluir(){ int codigo = 0; printf("\nDigite o codigo do livro que sera inserido: "); scanf("%d", &codigo); //verifica se já há um cadastro de livro com este codigo, chamando o metodo verifica e passado o codigo como parametro if(verifica(codigo) == 1){ printf("\nCódigo já existe!"); } else{ struct livro novoLivro; //cria um novo registro novoLivro.codigo = codigo; printf("\n%d", novoLivro.codigo); struct info iTitulo; struct info iAutor; struct info iEditora; struct info iCidade; fflush(stdin); char teste[10]; printf("\nDigite o Titulo do livro: "); //gets(iTitulo.val); gets(teste); fflush(stdin); //serve para limpar o buffer de leitura novoLivro.inf[0] = iTitulo; //guarda titulo no indice 1 printf("\nDigite o nome do autor: "); gets(iAutor.val); novoLivro.inf[1] = iAutor; //guarda autor no indice 2 printf("\nDigite o nome da editora: "); gets(iEditora.val); novoLivro.inf[2] = iEditora; //guarda editora no indice 3 printf("\nDigite a cidade: "); gets(iCidade.val); novoLivro.inf[3] = iCidade; //guarda cidade no indice 4 if(numEl == 0){ ptPrimeiro = (struct livro*) malloc(sizeof(struct livro)); ptPrimeiro = &novoLivro; ptUltimo = (struct livro*) malloc(sizeof(struct livro)); ptUltimo = &novoLivro; printf("\nsegundo teste: %d", (*ptUltimo).codigo); numEl++; } else{ novoLivro.ptAntLivro = &ptUltimo; //struct livro **pt; //pt = &ptUltimo.ptProxLivro; // struct livro tmp = *ptUltimo;//melhorar isso // tmp.ptProxLivro = &novoLivro; (*ptUltimo).ptProxLivro = &novoLivro; novoLivro.ptProxLivro = NULL; printf("\nprimeiro teste: %d", novoLivro.codigo); ptUltimo = (struct livro*) malloc(sizeof(novoLivro)); ptUltimo = &novoLivro; printf("\nsegundo teste: %d", (*ptUltimo).codigo); numEl++; } printf("\nLivro cadastrado com sucesso!"); } } int verifica(int codigo){ int i; struct livro *tmp = ptPrimeiro; for(i = 1; i <= numEl; i++){ if(codigo == (*tmp).codigo){ return 1; } else{ tmp = (*tmp).ptProxLivro; } } return 0; } void faz(){ int a = (*ptUltimo).codigo; printf("\nsegundo teste: %d", a); }
×
×
  • Criar Novo...