Ir ao conteúdo
  • Cadastre-se

C Criar uma agenda usando ponteiro void


Poisoned00

Posts recomendados

A ideia é bem simples , criar uma agenda pra receber nomes e numeros de pessoas , e guarda-los.

porém toda a memória usada tem que ficar em apenas 1 variável , que é um ponteiro void , as demais variáveis podem ser apenas structs , ou ponteiros que guardem APENAS endereços de memória..

meu código consegue  inserir , porém ta imprimindo errado . detalhe é que se eu inserir apenas 2 pessoas , ele insere e imprime certo..
mais que isso imprime lixo..

 

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct control{
	
	int ContadorDePessoas; // contador de pessoas no loop
	int TotalDePessoas; // armazena a quantidade total de pessoas
	
}control;

typedef struct user{
	char Nome[20]; // nome da pessoa
	int Num; // numero da pessoa 
	control controle; 

}user;
user *ptrUser;//ptrUser//usuarioAtual
user *aux;//aux//primeiroUsuario
void *pbuffer;

// essa função funciona 
void imprimirUm(user *ptrUser){

	printf("\nNome: %s",ptrUser->Nome);
	printf("\nNumero: %d",ptrUser->Num); 
	ptrUser++;
	
}

// essa função imprime valores errados ou trocados
void imprimirTodos(){

    user *ptrAtual;
	
	ptrAtual = aux;

	for(aux->controle.ContadorDePessoas = 0 ; aux->controle.ContadorDePessoas < aux->controle.TotalDePessoas ; aux->controle.ContadorDePessoas++,ptrAtual++ ){
		printf("\nNome: %s",ptrAtual->Nome);
		printf("\nNumero: %d",ptrAtual->Num); 
	}

}

void inserir(user  *ptrUser){
	
	ptrUser->controle.TotalDePessoas++;
	
	if(ptrUser->controle.TotalDePessoas > 1){
	
		
	ptrUser = realloc(ptrUser,(aux->controle.TotalDePessoas * sizeof(user)));
	aux = ptrUser;
	
	for (aux->controle.ContadorDePessoas = 0; aux->controle.ContadorDePessoas < ptrUser->controle.TotalDePessoas; aux->controle.ContadorDePessoas++){
		ptrUser++;
	}
	
	}else{

		aux = ptrUser;
		
	}

	printf("Nome:");
	scanf("%[^\n]",ptrUser->Nome);
	printf("Numero:");
	scanf("%d",&ptrUser->Num);
	
	//Essa função funciona certinho para cada usuario.
	//imprimirUm(ptrUser); 
	
	ptrUser++;
}


int main(int argc, char const *argv[])
{
	
	pbuffer = malloc(sizeof(user));
	
	if(pbuffer == NULL){
		return -1;
	}

	ptrUser = pbuffer ;
	ptrUser->controle.TotalDePessoas = 0 ; 
	
	
	for (int i = 0; i < 3; i++){
		inserir(ptrUser);
		getchar();	
	}


	imprimirTodos();

	
	return 0;
}

help!

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