Ir para conteúdo

Arquivado

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

pedro rodrigues

ler dados de arquivo txt do tipo 'string'

Recommended Posts

Bom dia pessoal.

O negócio é o seguinte; eu tenho um programinha que grava os dados de uma lista encadeada em um arquivo txt, até ai tranquilo, quando vou recupera-los tenho um problema, na hora de recuperar o campo do tipo 'string' ele recupera junto a quebra de linha e na hora de imprimir na tela os dados da lista (recuperados do txt) ele quebra a linha sem poder ter quebrado.

 

Alguém sabe me dizer como resolver?

 

Aí vai o código e algumas tentativas, em comentário, de resolver o problema...

 

#include <stdio.h>#include <stdlib.h>#include <string.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 gravarArquivo();	void recuperarArquivo();	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: ");				//strOpcaoMenu = getch();		scanf("%s", &strOpcaoMenu);				//printf("- - - - - - - - - - - - - - - - - - - - - - - - - - -\n");				escreverCabecalho();				switch(strOpcaoMenu) {			case '1':				consultar(pLista); break;			case '2':				inserir(pLista); break;			case '3':				alterar(pLista); break;			case '4':				remover(pLista); break;			case '5':				gravarArquivo(pLista); break;			case '6':				recuperarArquivo(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;	if (pLista->prox != NULL) pLista->prox->ante = nova;		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);						printf("\n");						while(strAlterar != 'S' && strAlterar != 's' && strAlterar != 'N' && strAlterar != 'n') {				printf("\n	   Alterar (S/N)? ");				strAlterar = getch();				printf("%c", strAlterar);				//scanf("%s", &strAlterar);			}						if (strAlterar == 'S' || strAlterar == 's') {			   	printf("\n\n	   Descricao: ");			   	scanf("%s", &p->descricao);			   				   	printf("	   Preco Unitario: ");			   	scanf("%f", &p->preco_unit);			   				   	printf("	   Quantidade em estoque: ");			   	scanf("%d", &p->qtde_estoque);			}					} 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);						printf("\n");						while(strRemover != 'S' && strRemover != 's' && strRemover != 'N' && strRemover != 'n') {				printf("\n	   Remover (S/N)? ");				strRemover = getch();				printf("%c", strRemover);				//scanf("%c", &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 gravarArquivo(lista *pLista) {	FILE *pfile;		pfile = fopen("arquivoTexto.txt", "w");		if(!pfile) {		printf("Erro na abertura do arquivo.");		getch();		exit(0);	}		lista *p;	char string[150];	int intContador = 0;		//fputs(" L I S T A  D E  P R O D U T O S\n", pfile);	//fputs(" = = = = =  = =  = = = = = = = =\n", pfile);		pLista = pLista->prox;		while(pLista != NULL) {		p = pLista;		pLista = pLista->prox;	}		while(p->ante != NULL) {		if (intContador > 0) {			putc('\n', pfile);			putc('\n', pfile);		}				//fputs(" Código...............: ", pfile);		fputs(itoa(p->codigo, string, 10), pfile);		putc('\n', pfile);				//fputs(" Descrição............: ", pfile);		fputs(p->descricao, pfile);		putc('\n', pfile);				//fputs(" Preço unitário.......: ", pfile);		sprintf(string, "%1.2f", p->preco_unit);		fputs(string, pfile);		putc('\n', pfile);				//fputs(" Quantidade em estoque: ", pfile);		fputs(itoa(p->qtde_estoque, string, 10), pfile);				p = p->ante;		intContador++;	}		fclose(pfile);	printf("	   %d registros foram gravados.", intContador);		escreverVoltarMenu();}void recuperarArquivo(lista *pLista) {	FILE *pfile;		pfile = fopen("arquivoTexto.txt", "r");		if(!pfile) {		printf("Erro na abertura do arquivo.");		getch();		exit(0);	}		char string[150];	char string2[150];	int intContador = 0;	lista *nova;		while (!feof(pfile)) {		nova = malloc(sizeof(lista));		nova->ante = pLista;		nova->prox = pLista->prox;		if (pLista->prox != NULL) pLista->prox->ante = nova;		pLista->prox = nova;				if (intContador > 0) fgets(string, 150, pfile);				fgets(string, 150, pfile); 		nova->codigo		= atoi(string);				fgets(string, 150, pfile);		strncat(string2, string, (strlen(string))-1);		strcpy(nova->descricao, string);		//strncpy(nova->descricao, string, (strlen(string))-1);		//nova->descricao		= string;		//fgets(nova->descricao, 150, pfile);				fgets(string, 150, pfile);		nova->preco_unit	= atof(string);				fgets(string, 150, pfile);		nova->qtde_estoque	= atoi(string);						intContador++;	}		fclose(pfile);	printf("	   %d registros foram recuperados.", intContador);		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, flw, abraç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.