Ir ao conteúdo

Problemas com gravação em TXT


jonynho22

Posts recomendados

Postado

Galera montei um código para fazer gravação dos dados num txt o problema é que os valores gravados estão saindo de forma estranha tipo os valores numericos não estão saindo corretamente e no campo endereço se eu digito com espaços para separar as informações ele não salva o que está depois do primeiro espaço. alguem tem alguma sugestão???

o código está da seguinte foma

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#include <iostream.h>

int main()
{
int codigo[5], tel[10];
char endereco[50],nome[20];

FILE *dados;
dados = fopen("dados.txt","a+b");

clrscr();
printf("Codigo:");
scanf("%d", &codigo);
fprintf(dados, "%d", codigo);
printf("Digite um nome: ");
scanf("%s", &nome);
fprintf(dados, "%s", nome);
printf("Digite um telefone: ");
scanf("%d", &tel);
fprintf(dados, "%d", tel);
printf("Digite o Endereço: ");
scanf("%s", &endereco);
fprintf(dados, "%s", endereco);
printf("Cadastro realizado com sucesso!\n");
getch();

fclose(dados);
return 0;
}

e na hora que ele salva os valores aparecem assim:

-20joao-40rua-20juca-40rua

Postado

Não sei o que exatamente está acontecendo, mas o programa tem muitos erros de lógica(embora a sintaxe esteja ok):

-"int codigo[5], tel[10];" Você criou imaginando que, ao usar scanf(), cada digito entraria em um campo. Não funciona assim, scanf irá ler tudo como 1 número e armazenar tudo em "codigo[0]" e "tel[0]", no caso do "tel" em computadores em que "int" tem 2 bytes você estouraria o limite de espaço, então declare como "long int".

-"scanf("%d", &codigo);" codigo[] é uma array. Apenas "codigo" já é suficiente para indicar o endereço. "&codigo" seria o endereço do endereço... nesse caso não faz sentido. O mesmo vale pra todos os outros.

-Em todas as impressões você usa "fprintf(dados, "%s", nome);", sem formatação nenhuma. Então os valores vão ficar colados uns nos outros. Se for esse seu intuito (para ficar mais fácil puxar os dados depois, por exemplo), ok, senão use algo como "fprintf(dados, "%s ", nome);" ou "fprintf(dados, "%s\n", nome);".

-Sobre não imprimir depois do espaço, não sei o funcionamento de scanf() (uso notação c++ a muito tempo), mas acho que ele desconsidera valores depois do espaço. Ou seja, não é que eles não sejam salvos no arquivo: eles nem sequer foram lidos por scanf().

Resumindo: estude mais a notação de endereços, arrays, strings e ponteiros e tente reescrever. Já acho incrivel que não esteja gravando apenas o endereço das variáveis e vá realmente algum texto para o arquivo.

Postado

barutaji e dontpanic obrigado pelas respostas ajudou bastante a resolver alguns dos problemas, mas o problemas principal ainda não consegui resolver, o valores numéricos que são salvos no txt ainda estão aparecendo totalmente sem noção do que é digitado na hora que eu rodo o sistema. tentei trocar para long int, alterar a variavel e etc mais nada....

Postado

tente usar

para "int" use:

fprintf(dados, "%d", tel[0]);

para "char" use:

fprintf(dados, "%s", endereco);

No primeiro ele vai imprimir o valor do 1ºelento int. No segundo vai iniciar um loop dentro de fprintf() de avançar byte por byte e ir imprimindo até achar o byte 0. Os processos são completamente diferentes, por isso exigem notações diferentes.

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...