Dev - C++ - error escritura en archivo

 
Vista:
sin imagen de perfil

error escritura en archivo

Publicado por ariel (2 intervenciones) el 25/02/2016 00:59:14
Hola que tal gente, soy principiante en esto de la programación ...tengo que entregar un tp y me surgio un problema con la escritura de un archivo. Cuando me fijo en el txt me escribe simbolos, no los datos que se ingresan.
Les copio el codigo a ver si alguno me puede ayudar.
Desde ya les agradezco mucho el que se tome el tiempito porque tengo que entregarlo el viernes.
Saludos

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
 
struct datos_cuotas
	{
	float valorcuota;
	char estado;
	}cuotas;
 
struct datos_clientes
	{
	int clifact;
	int cantcuot;
    datos_cuotas cuotas[12];
	}clientes;
 
struct datos_cobranzas
	{
	int puntocobro;
	int clifact;
	int numcuot;
	float monto;
	}cobranzas;
 
 int main()
	{
 
	FILE *maestro, *cobranzas;
	float precio=0,valor=0;
	int numcliente=0,puntovta=0,c=0;
    maestro=fopen("c:maestro.txt","a+b");
	if(maestro==NULL)
		{
		printf("no se puede abrir el archivo");
		getch();
		exit(1);
		}
	cobranzas=fopen("c:cobranzas.txt","a+b");
	if(cobranzas==NULL)
		{
 
	printf("no se puede abrir el archivo");
		getch();
		exit(1);
		}
 
	    printf("ELECTRODOMESTICOS DI SALVO\n");
		printf("1.Ingrese numero de cliente - factura: ");
	    scanf("%d",&numcliente);
	    fread(&clientes,sizeof(clientes),1,maestro);
	    while( !feof(maestro)&& (c==0) ) {
	    if (numcliente==clientes.clifact){
	    printf("Ingrese punto de venta: ");
		scanf("%d",&puntovta);
 
	    c=1;
		}
		fread(&clientes,sizeof(clientes),1,maestro);
		}
		if (c==0){
		printf("\nUsted esta comprando por primera vez\n");
		clientes.clifact=numcliente;
        printf("\n1.Ingrese el valor del electrodomestico: ");
	    scanf("%f",&precio);
	    printf("\n1.Ingrese cantidad de cuotas 1,2,3,4,5,6,7,8,9,10,11,12: ");
	    scanf("%d",&clientes.cantcuot);
	    cuotas.valorcuota=precio/clientes.cantcuot;
	    printf("Debera abonar %d cuotas de %f por el electrodomestico seleccionado",clientes.cantcuot,cuotas.valorcuota);
	    fwrite(&clientes,sizeof(clientes),1,maestro);}
	    fclose(maestro);
	    fclose(cobranzas);
	}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 661
Bronce
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

error escritura en archivo

Publicado por agustin (522 intervenciones) el 25/02/2016 08:30:42
Eso es normal ya que estas escribiendo estructuras en binario. Si quieres que los datos sean legibles en el txt al abrirlo, utiliza fscanf y fprintf en vez de fread y fwrite. Otra opción es usar cadenas de texto para todo y al leer haces la conversión a lo que desees pero ya te digo que esta haciendo lo que debe.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

error escritura en archivo

Publicado por ariel (2 intervenciones) el 25/02/2016 15:56:36
Que tal Agustin, muchisimas gracias por tomarte el tiempo para contestarme, justo lo habia pasado todo a cadenas y si funcionaba. Ahora bien como me pidieron que ciertos datos sean enteros y otros flotantes voy a usar el fscanf y el fprintf. Te consulto: trabajando con struct en mi programa como serian los parametros de fscanf y el fprintf. porque me queda colgado cuando lo corro. Probe fscanf(maestro,"%d %d %f %c",&clientes.clifact,&clientes.cantcuot,&cuotas.valorcuota,&cuotas.estado) y fscanf(maestro,"%d %d %f %c",clientes); . Desde ya te agradezco si me ayudas con esto.
Muchas gracias nuevamente por tu tiempo.
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar