ler dados de arquivo txt do tipo 'string'
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...
Discussão (2)
Carregando comentários...