C/Visual C - Problema con ficheros

 
Vista:
sin imagen de perfil

Problema con ficheros

Publicado por Sebastián (31 intervenciones) el 16/02/2017 17:09:08
Hola con todos, quisiera que me ayudaran con un problema que tengo, hice un programa que escriba datos en un fichero, y los guarde, posterior a ello abro el fichero, guardo sus datos en una estructura y posterior a ellos imprimo dichos datos por consola, el programa funciona bien, solo que al final luego de imprimir, sale un mensaje de que ha dejado de funcionar, supongo que es por la asignación dinámica, pero no hallo el fallo.

Gracias de antemano por su ayuda.


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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/*Escribir un programa que lea el contenido de un archivo de texto en que cada linea contenga los datos que definen al vehiculo, y rellene de esa forma una tabla de variables de tipo 
vehiculo. El programa debe comprobar que el numero de lineas que vaya leyendo no supera la dimension de la tabla definida, una vez terminado de leer el archivo debe imprimirse en pantalla
los datos de los vehiculo, y liberarse toda la memoria alojada dinamicamente*/
 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
typedef struct
{
	char prop[20];
	char apelli[20];
	char color[20];
	char marca[10];
	int anio;
}vehiculo;
 
void imprimir(vehiculo *p, int n)
 {
 	for(int i=0; i<n;i++)
 	{
 	printf("\n\n\nVehiculo %d",i+1);
 	printf("\n\nNombre de propietario: ");
	puts((p+i)->prop);
	printf("\nApellido de propietario: ");
	puts((p+i)->apelli);
	printf("\nColor: ");
	puts((p+i)->color);
	printf("\nMarca: ");
	puts((p+i)->marca);
	printf("\nAnio:");
	printf("%d",(p+i)->anio);
	}
 }
 
int main()
{
	int n;
	char aux1[20],aux2[10],aux3[10],aux4[10],aux5[10];
	printf("Ingrese el numero de autos: ");
	scanf("%d",&n);
	fflush(stdin);
	FILE *fich;
	fich=fopen("carros.txt","wt");
	if(fich==NULL)
		puts("\n- No se puede abrir el fichero");
	else
	{
		for(int i=0;i<n;i++)
		{
			printf("\n\nAUTO %d",i+1);
			printf("\nNombre del propietario: ");
			scanf("%s",&aux1);
			fflush(stdin);
			printf("\nApellido del propietario: ");
			scanf("%s",&aux5);
			fflush(stdin);
			printf("\nColor: ");
			scanf("%s",&aux2);
			fflush(stdin);
			printf("\nMarca: ");
			scanf("%s",&aux3);
			fflush(stdin);
			printf("\nAnio: ");
			scanf("%s",&aux4);
			fflush(stdin);
			fprintf(fich,"%s\t%s\t%s\t%s\t%s\n",aux1,aux5,aux2,aux3,aux4);
		}
	}
	fclose(fich);
	vehiculo carro1[n], *p;
	p=(vehiculo*)realloc((n*sizeof(vehiculo)));
	char str[100],x[20],y[20],z[10],w[5],v[10];
	int a,i=0;
	fich=fopen("carros.txt","r");
	if(fich==NULL)
		puts("\n- No se puede abrir el fichero");
	else
			for(i=0;i<n,feof(fich)==0;i++)
			{
 
				fgets(str,100,fich);
				sscanf(str,"%s\t%s\t%s\t%s\t%s",x,v,y,z,w);
				a=atoi(w);
				strcpy((p+i)->prop,x);
				strcpy((p+i)->apelli,v);
				strcpy((p+i)->color,y);
				strcpy((p+i)->marca,z);
				(p+i)->anio=a;
			}
	fflush(stdin);
	imprimir(p,n);
	free(p);
	fclose(fich);
	return(0);
}
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: 296
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Problema con ficheros

Publicado por agustin (272 intervenciones) el 17/02/2017 23:50:53
intentando mantener al maximo lo que tenias lo he dejado asi:
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include <stdio.h>
#include <stdlib.h>
 
typedef struct
{
	char prop[20];
	char apelli[20];
	char color[20];
	char marca[10];
	int anio;
}vehiculo;
 
void imprimir(vehiculo *p, int n)
{
    int i;
 	for(i=0; i<n;i++)
 	{
        printf("\n\n\nVehiculo %d",i+1);
 	    printf("\n\nNombre de propietario: ");
        puts((p+i)->prop);
        printf("\nApellido de propietario: ");
        puts((p+i)->apelli);
        printf("\nColor: ");
        puts((p+i)->color);
        printf("\nMarca: ");
        puts((p+i)->marca);
        printf("\nAnio:");
        printf("%d",(p+i)->anio);
	}
}
 
void CrearFichero(const char *filename, const int n)
{
    int i;
    vehiculo car;
    FILE *fich;
 
    fich=fopen("carros.txt","w");
 
	if(fich==NULL)
		puts("\n- No se puede abrir el fichero");
	else
	{
		for(i=0;i<n;i++)
		{
			printf("\n\nAUTO %d",i+1);
			printf("\nNombre del propietario: ");
			scanf("%s",car.prop);
			fflush(stdin);
 
			printf("\nApellido del propietario: ");
			scanf("%s",car.apelli);
			fflush(stdin);
 
			printf("\nColor: ");
			scanf("%s",car.color);
			fflush(stdin);
 
			printf("\nMarca: ");
			scanf("%s",car.marca);
			fflush(stdin);
 
			printf("\nAnio: ");
			scanf("%d",&(car.anio));
			fflush(stdin);
 
			fprintf(fich,"%s\t%s\t%s\t%s\t%d\n",car.prop,car.apelli,car.color,car.marca,car.anio);
		}
	}
	fclose(fich);
}
 
vehiculo* LeerFichero(const char *filename, const int n)
{
    vehiculo *carros=NULL;
    int i;
    char str[100];
    FILE *fich;
 
    fich=fopen("carros.txt","r");
 
	if(fich==NULL)
		puts("\n- No se puede abrir el fichero");
	else
        carros=(vehiculo*)malloc((n*sizeof(vehiculo)));
        for(i=0;i<n;i++)
        {
            fgets(str,100,fich);
            if(!feof(fich)){
                sscanf(str,"%s\t%s\t%s\t%s\t%d",(carros+i)->prop,(carros+i)->apelli,(carros+i)->color,(carros+i)->marca,&((carros+i)->anio));
            }
        }
	fclose(fich);
    return carros;
}
 
int main()
{
	int n;
    vehiculo *carros;
 
	printf("Ingrese el numero de autos: ");
	scanf("%d",&n);
	fflush(stdin);
 
	CrearFichero("carros.txt",n);
 
	carros=LeerFichero("carros.txt",n);
    if(carros != NULL){
        imprimir(carros,n);
	    free(carros);
    }
	return(0);
}
A mi así no me da ningun fallo.
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