Ir para conteúdo

Arquivado

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

pedro rodrigues

Lista Ligada / encadeada

Recommended Posts

Boa tarde pessoal.

Estou fazendo um programinha com lista encadeada e estou com problema para remover...

O problema é na hora de ajustar o ponteiro prox da celula anterior = prox da atual;

E com o ponteiro anterior também da problema...

 

Também tem problema na alteração...

 

Alguém poderia ajudar? Não sei onde estou errando...

 

aí vai o código...

 

#include <stdio.h>#include <stdlib.h>/* DECLARAÇÃO DE VARIAVEIS 'GLOBAIS' */	int intContadorLista = 0;/* DECLARAÇÃO DE FUNÇÕES / METÓDOS */	void escreverCabecalho();	void escreverVoltarMenu();	void consultar();	void inserir();	void alterar();	void remover();	void listar();	void sair();/* ESTRUTURA DA CÉLULA DA LISTA */	struct celula {		int		codigo;		char	descricao[20];		float	preco_unit;		int		qtde_estoque;				struct	celula *ante;			struct	celula *prox;	};	typedef struct celula lista;/* INICIO DO PROGRAMA */int main() { 	char strOpcaoMenu;	//	strOpcaoMenu = NULL;		/* CRIA A LISTA (COM CABEÇA) */	lista *pLista;	pLista = malloc(sizeof(lista));	pLista->ante = NULL;	pLista->prox = NULL;		/* LAÇO DO PROGRAMA */		while(strOpcaoMenu != '9') {		escreverCabecalho();				/* MENU */		printf("	   M E N U\n");		printf("	   = = = =\n\n");		printf("	   1. Consultar\n");		printf("	   2. Inserir\n");		printf("	   3. Alterar\n");		printf("	   4. Remover\n");		printf("	   5. Gravar em arquivo\n");		printf("	   6. Recuperar do arquivo\n");		printf("	   7. \n");		printf("	   8. Listar\n");		printf("	   9. Sair\n\n");		printf("	   Opcao: ");				scanf("%s", &strOpcaoMenu);				//printf("- - - - - - - - - - - - - - - - - - - - - - - - - - -\n");				escreverCabecalho();				switch(strOpcaoMenu) {			case '1':				consultar(pLista); break;			case '2':				inserir(pLista); break;						case '4':				remover(pLista); break;						case '8':				listar(pLista); break;			case '9':				sair(pLista); break;			default:				printf("Opcao \"%c\" eh invalida!", strOpcaoMenu);				printf("\n\n");				escreverVoltarMenu();		}	}		return 0; system("exit");}void escreverCabecalho() {		system("cls");		printf("\n");		printf("- - - - - - - - - -| S. M. E  N. |- - - - - - - - - -\n");		printf("- - - - - - - - - - - - - - - - - - - - - - - - - - -");		printf("\n\n");}void escreverVoltarMenu() {	printf("\n\n	   Precione uma telca para voltar...");	getch();	}void consultar(lista *pLista) {	printf("	   C O N S U L T A R\n");	printf("	   = = = = = = = = =\n\n");		int intCodigo;		printf("	   Digite o codigo a ser consultado, ou zero (0) para voltar: ");	scanf("%d", &intCodigo);	if (intCodigo != 0) {		lista *p;		p = pLista->prox;				while(p != NULL && p->codigo != intCodigo)			p = p->prox;				if (p != NULL) {			printf("\n\n	   Codigo..............: %d", p->codigo);			printf("\n	   Descricao...........: %s", p->descricao);			printf("\n	   Preco unitario......: %1.2f", p->preco_unit);			printf("\n	   Qatindade em estoque: %d", p->qtde_estoque);		} else			printf("\n\n	   Codigo nao encontrado.");				escreverVoltarMenu();	}	}void inserir(lista *pLista) {	printf("	   I N S E R I R\n");	printf("	   = = = = = = =\n\n");   		lista *nova;	nova = malloc(sizeof(lista));	nova->ante = pLista;	nova->prox = pLista->prox;		pLista->prox = nova;	   	intContadorLista++;   	   	nova->codigo = intContadorLista;	printf("	   Codigo: %d", nova->codigo);	   	printf("\n\n	   Descricao: ");   	scanf("%s", &nova->descricao);   	   	printf("	   Preco Unitario: ");   	scanf("%f", &nova->preco_unit);   	   	printf("	   Quantidade em estoque: ");   	scanf("%d", &nova->qtde_estoque);   		escreverVoltarMenu();}void alterar(lista *pLista) {	/*	printf("	   A L T E R A R\n");	printf("	   = = = = = = =\n\n");		int intCodigo;		printf("	   Digite o codigo do registro a ser alterado, ou zero (0) para voltar: ");	scanf("%d", &intCodigo);		if (intCodigo != 0) {		lista *p;		p = pLista->prox;				while(p != NULL && p->codigo != intCodigo)			p = p->prox;				if (p != NULL) {			char strAlterar;						printf("\n\n	   Codigo..............: %d", p->codigo);			printf("\n	   Descricao...........: %s", p->descricao);			printf("\n	   Preco unitario......: %1.2f", p->preco_unit);			printf("\n	   Qatindade em estoque: %d", p->qtde_estoque);						while(strAlterar != 'S' && strAlterar != 's' && strAlterar != 'N' && strAlterar != 'n') {				printf("\n\n	   Remover (S/N)? ");				scanf("%s", &strAlterar);			}					} else			printf("\n\n	   Codigo nao encontrado.");				escreverVoltarMenu();	}	*/}void remover(lista *pLista) {	printf("	   R E M O V E R\n");	printf("	   = = = = = = =\n\n");		int intCodigo;		printf("	   Digite o codigo do registro a ser removido, ou zero (0) para voltar: ");	scanf("%d", &intCodigo);		if (intCodigo != 0) {		lista *p;		p = pLista->prox;				while(p != NULL && p->codigo != intCodigo)			p = p->prox;				if (p != NULL) {			char strRemover;						printf("\n\n	   Codigo..............: %d", p->codigo);			printf("\n	   Descricao...........: %s", p->descricao);			printf("\n	   Preco unitario......: %1.2f", p->preco_unit);			printf("\n	   Qatindade em estoque: %d", p->qtde_estoque);						while(strRemover != 'S' && strRemover != 's' && strRemover != 'N' && strRemover != 'n') {				printf("\n\n	   Remover (S/N)? ");				scanf("%s", &strRemover);								if (strRemover == 'S' || strRemover == 's') {					lista *q;										q = p->ante;					q->prox = p->prox;										q = p->prox;					if (q != NULL) q->ante = p->ante;										free(p);										printf("\n\n	   Removido...");				}			}		} else			printf("\n\n	   Codigo nao encontrado.");				escreverVoltarMenu();	}	}void listar(lista *pLista) {	printf("	   L I S T A R\n");	printf("	   = = = = = =");		char	strVazia = 's';	lista	*p;		p = pLista->prox;		while(p != NULL) {		strVazia = 'n';		printf("\n\n	   Codigo..............: %d", p->codigo);		printf("\n	   Descricao...........: %s", p->descricao);		printf("\n	   Preco unitario......: %1.2f", p->preco_unit);		printf("\n	   Qatindade em estoque: %d", p->qtde_estoque);		p = p->prox;	}		if (strVazia == 's') printf("\n\n	   Lista vazia!");		escreverVoltarMenu();}void sair(lista *pLista) {	printf("	   S A I R\n");	printf("	   = = = =\n\n");		free(pLista);		printf("	   Precione uma tecla para sair...");	getch();}

vlw galera... abraço...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera, eu achei onde estava o problema...

Era o scanf q tava zicando tudo... estou usando getch e agora ta legal...

 

Agora estou tentando gravar em um txt as informações, estou com problema na hora de gravar o valor unitário que é float, ele está gravando apenas a parte inteira, alguém sabe como fazer? como converter um float para string?

 

código de gravação em txt:

void gravarArquivo(lista *pLista) {	FILE *file;		file = fopen("arquivoTexto.txt", "w");		if(!file) {		printf( "Erro na abertura do arquivo.");		getch();		exit(0);	}		lista *p;	char string[100];	int intContador = 0;		p = pLista->prox;		fputs(" L I S T A  D E  P R O D U T O S\n", file);	fputs(" = = = = =  = =  = = = = = = = =\n", file);		while(p != NULL) {				putc('\n', file);		putc('\n', file);				fputs(" Codigo...............: ", file);		fputs(itoa(p->codigo, string, 10), file);		putc('\n', file);				fputs(" Descrição............: ", file);		fputs(p->descricao, file);		putc('\n', file);				fputs(" Preço unitário.......: ", file);		//fputs(itoa(p->preco_unit, string, 10), file);		//fputs(p->preco_unit, file);		fprintf(file, string, p->preco_unit);		putc('\n', file);				fputs(" Quantidade em estoque: ", file);		fputs(itoa(p->qtde_estoque, string, 10), file);				p = p->prox;		intContador++;	}		fclose(file);	printf("%d registros foram gravados.", intContador);		escreverVoltarMenu();}

vlw... flw...

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.