Ir para conteúdo
Fórum Script Brasil
  • 0

Criar e Ler Arquivos de Texto.


Ervilha

Pergunta

Fiz esse programinha para criar e ler em arquivos de texto,

Ele cria normal, mas na hora de ler, ele mostra certinho na tela, mas da um erro depois.

alguém sabe o que pode ser?

// Teste.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct _Contato 
{
    int codigo;
    char nome[30];
    char email[100];
} Contato;

int main() 
{
    // Cria ponteiro para arquivo
    FILE *agenda;
    // Cria nova variavel do tipo Contato
    Contato addcont;
    // Variavel temporaria para gravar uma linha no arquivo
    char temp[4096];
    int ctrl;

    // Inicia o Menu
    ctrl = 0;

    while (ctrl != 3)
    {
        system("cls");
        printf("\n AGENDA TELEFONICA");
        printf("\n\n 1 - Inserir na lista");
        printf("\n 2 - Ler da lista");
        printf("\n 3 - Sair");
        printf("\n\n ==> ");
        scanf("%d",&ctrl);
        system("cls");

        // Incluir
        if (ctrl==1)
        {
            // Inicia os valores
            addcont.codigo = 1;
            fflush(stdin);
            printf(" Entre com o nome: ");
            gets(addcont.nome);
            fflush(stdin);
            printf(" Entre com o e-mail: ");
            gets(addcont.email);

            // Abre novo arquivo para operacoes de escrita e gravacao (a+)
            // Caso o arquivo não exista ele cria, caso ele exista
            // As gravacoes serao concatenadas no final do arquivo
            agenda = fopen("agenda.txt", "a+");

            // Importante: Testar se o ponteiro foi criado
            if (!agenda) 
            {
                printf("Erro: não foi possivel abrir/criar o arquivo\n");
                exit(0);
            }

            // Monta a linha para gravar no arquivo;
            sprintf(temp, "%d;%s;%s\r\n", addcont.codigo, addcont.nome, addcont.email);
            // Faz a gravacao dos dados no arquivo no formato CSV (Separado por ";")
            fputs(temp, agenda);

            // Fecha ponteiro do arquivo e evita que dados sejam corrompidos
            fclose(agenda);            
        }

        // Ler
        if (ctrl==2)
        {
            // Abre novo arquivo para leitura (r = read)
            agenda = fopen("agenda.txt", "r");

            // Importante: Testar se o ponteiro foi criado
            if (!agenda) 
            {
                printf("Erro: não foi possivel abrir o arquivo\n");
                exit(0);
            }

            // Enquanto o final do arquivo não chega... fica no loop
            while (!feof(agenda)) 
            {
                // O fgets le uma linha de tamanho 4096 e armazena no temp
                // do ponteiro de arquivo agenda
                fgets(temp, 4096, agenda);

                // A funcao atoi converte uma string passada para inteiro
                // A funcao strtok divide uma string em tokens (partes)
                //  Obs.: Apenas passar a string para o strtok na primeira chamada
                //        as outras devem ter NULL ate q a string inteira seja dividida
                addcont.codigo = atoi(strtok(temp, ";\r\n"));
                strcpy(addcont.nome, strtok(NULL, ";\r\n"));
                strcpy(addcont.email, strtok(NULL, ";\r\n"));

                printf("| %3d | %30s | %30s |\n", addcont.codigo, addcont.nome, addcont.email);

            }
            // Fecha ponteiro do arquivo e evita que dados sejam corrompidos
            fclose(agenda);
            system("pause");
        }    
    }
    //return 0;
}

Editado por Ervilha
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...