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;
}
Pergunta
Ervilha
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 ErvilhaLink 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.