Estructura en Ficheros
Publicado por LoloVet (2 intervenciones) el 29/11/2017 06:13:19
Hola, necesito ayuda con este programa, se trata de una Pokédex sencilla, en pocas palabras un listado que se alamacenará en una estructura a la vez que se muestra, el fichero se encuentra de esta forma :
001-Bulbasaur-Planta/Veneno
002-Ivysaur-Planta/Veneno
003-Venusaur-Planta/Veneno
004-Charmander-Fuego
005-Charmeleon-Fuego etc...
Mi problema es que no sale del ciclo FOR, al ejecutarse el programa, almacena y muestra el listado pero el programa muestra un error de exe y se detiene, todo lo que está después del ciclo, no sé realiza. Muchas gracias de antemano. Aquí el código:
001-Bulbasaur-Planta/Veneno
002-Ivysaur-Planta/Veneno
003-Venusaur-Planta/Veneno
004-Charmander-Fuego
005-Charmeleon-Fuego etc...
Mi problema es que no sale del ciclo FOR, al ejecutarse el programa, almacena y muestra el listado pero el programa muestra un error de exe y se detiene, todo lo que está después del ciclo, no sé realiza. Muchas gracias de antemano. Aquí el código:
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#include<stdio.h>
#include<windows.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
FILE *doc=fopen("Pokemons.txt", "r");
char temp[50];
//doc=fopen("Pokemons.txt", "r");
//----------------------------------------------------------------------Estructura
typedef struct
{
int Numero;
char *Nombre;
char *Tipo;
char *Evolucion;
}Pokemons;
Pokemons *Pok;
//----------------------------------------------------------------------Funcion numero
void copiarnumero(char temp[], int i)
{
int x;
x=strlen(temp)+1;
Pok[i].Numero=atoi(temp);
//printf("\n Elejido N.%d ", Pok[i].Numero);
}
//----------------------------------------------------------------------Funcion nombre
void copiarnombre(char temp[], int i)
{
int x;
x=strlen(temp)+1;
Pok[i].Nombre=(char*)malloc(x*sizeof(char));
if(Pok[i].Nombre==NULL)
{
printf("\n No se reservo memoria:");
}
strcpy(Pok[i].Nombre, temp);
//printf("\t %s", Pok[i].Nombre);
}
//----------------------------------------------------------------------Funcion tipo
void copiartipo(char temp[], int i)
{
int x;
x=strlen(temp)+1;
Pok[i].Tipo=(char*)malloc(x*sizeof(char));
if(Pok[i].Tipo==NULL)
{
printf("\n No se reservo memoria:");
}
strcpy(Pok[i].Tipo, temp);
//printf("\n %s", Pok[i].Tipo);
}
//----------------------------------------------------------------------Funcion limpiar
void limpiar()
{
int u;
for(u=0;u<50;u++)
{
temp[u]='\0';
}
}
//----------------------------------------------------------------------Funcion secuecia
int ingresar(int i, char leer, FILE *doc)
{
int j=0;
if(!feof(doc))
return 0;
leer='\0';
limpiar();
for(j=0; leer!='-'; j++) //numero
{
leer=fgetc(doc);
if(leer !='-')
temp[j]=leer;
}
copiarnumero(temp,i);
limpiar();
leer='\0';
for(j=0; leer!='-'; j++) //nombre
{
leer=fgetc(doc);
if(leer !='-')
temp[j]=leer;
}
copiarnombre(temp,i);
limpiar();
leer='\0';
for(j=0; leer!='\n'; j++) //tipo
{
leer=fgetc(doc);
if(leer !='\n')
temp[j]=leer;
}
copiartipo(temp,i);
printf("\n %d %8s %8s", Pok[i].Numero, Pok[i].Nombre, Pok[i].Tipo);
ingresar(i+1, leer,doc);
}
//----------------------------------------------------------------------Funcion principal
int main()
{
char leer;
int c=0,i=0;
while(!feof(doc))
{
fgets(temp,50,doc);
c++;
}
rewind(doc);
Pok=(Pokemons*)malloc(c*sizeof(Pokemons));
if(doc==NULL)
printf("\n Ingrese Pokemones al listado:");
ingresar(i=0, leer, doc);
fclose(doc);
system("PAUSE");
return 0;
}
Valora esta pregunta


0