C/Visual C - uso del malloc en ejercicio

 
Vista:
sin imagen de perfil
Val: 185
Bronce
Ha aumentado 1 puesto en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

uso del malloc en ejercicio

Publicado por carlos (95 intervenciones) el 18/08/2023 23:05:01
Tengo que hacer un ejercicio que consiste en modificar un problema del apartado anterior pero no consigo que funcione bien

Si intento meter datos al llegar a numero se queda pillado no se si sera culpa de la conversion ¿o estoy usando mal el malloc? (reservar memoria)

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
/*ejercicio 9.8.1 Mejorar la version dela agenda que leia todos los datosal principio de ejecucion y
guardaba todos los datos cuando terminabamos su uso(apartado 6.4).Esta nueva version deberá estar
preparada para manejar hasta 1000 fichas, perosolo reservara espaciopara las que realmentesea
necesarias*/
 
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int main(){
 
		struct Fichas{
		char nombre[40];
		char direccion[40];
		char email[40];
		 int tlf;
		short int dia;
		short int mes;
		 int ano;
	};
	struct Fichas *Datos;
	Datos= (struct Fichas*) malloc ( 1000*sizeof(struct Fichas));
 
int contador;
char textoTemporal[50];
int opcion=1;
 
 
FILE* archivo;
	archivo=fopen("agenda.dat","wt");
	if(archivo==NULL){
		printf("Aqui no se le ha perdido nada");
		exit(1);
	}
fclose(archivo);
while(opcion!=0){
contador=0;
printf("¿Que desea hacer?\n");
printf("1º:Añadir nuevos datos\n");
printf("2º:Visualizar los nombre de la lista que ya existen\n");
printf("3º:Visualizar todos los datos de una persona especifica\n");
gets(textoTemporal);
sscanf(textoTemporal,"%d",&opcion);
switch(opcion){
 
	case 1:{
	archivo=fopen("agenda.dat","wt");
	while(strcmp((Datos+contador)->nombre,"")!=0){
		contador++;
	}
				/*LO QUE SE HA ECHO ABRIR ARCHIVO LUEGO COMPROBAR QUE EL HUECO ESTA VACIO SI NO LO ESTA SUMARA TODO EL RATO SI LO ESTA PIDE INFORMACION*/
 
		printf("Se añadiran nuevos datos en ranura %d\n",contador);
			printf("Introduzca nombre");
	gets(textoTemporal);
	strcpy((Datos+contador)->nombre,textoTemporal);
	fprintf(archivo,"%s",Datos->nombre);
 
 
	printf("Introduzca dirección");
	gets((Datos+contador)->direccion);
	fprintf(archivo,"%s",(Datos+contador)->direccion);
 
 
	printf("Introduzca telefono");
	gets(textoTemporal);
	sscanf(textoTemporal,"%d",(Datos+contador)->tlf);
	fprintf(archivo,"%d",(Datos+contador)->tlf);
 
 
 
	printf("Introduzca e-mail");
	gets((Datos+contador)->email);
	fprintf(archivo,"%s",(Datos+contador)->email);
 
 
	printf("Introduzca dia");
		gets(textoTemporal);
	sscanf(textoTemporal,"%d",(Datos+contador)->dia);
	fprintf(archivo,"%d",(Datos+contador)->dia);
 
 
	printf("Introduzca mes en numero");
	gets(textoTemporal);
	sscanf(textoTemporal,"%d",(Datos+contador)->mes);
	fprintf(archivo,"%d",(Datos+contador)->mes);
 
 
	printf("Introduzca año");
	gets(textoTemporal);
	sscanf(textoTemporal,"%d",(Datos+contador)->ano);
	fprintf(archivo,"%d",(Datos+contador)->ano);
	fclose(archivo);
		break;
		}
	case 2:
	{
		archivo=fopen("agenda.dat","rt");
		printf("A continuación se van a mostrar las listas de nombres\n");
 
		while(contador<=100){
		if(strcmp((Datos+contador)->nombre,"")!=0){
		contador++;
	}
		else
		printf("Nombre de la ranura %d:%s\n",contador,(Datos+contador)->nombre);
		contador++;
		fclose(archivo);
 
}
		break;
	}
	case 3:
			archivo=fopen("agenda.dat","rt");
 
		printf("Introduzca nombre a buscar");
		gets(textoTemporal);
				for(contador=0;contador<100;contador++){
					if(strcmp((Datos+contador)->nombre,textoTemporal)==0){
			printf("Nombre:%s\nDireccion:%s\nTelefono:%d\nemail:%s\ndia:%d\nMes:%d\nAño:%d\n",(Datos+contador)->nombre,
			(Datos+contador)->direccion,(Datos+contador)->tlf,(Datos+contador)->email,(Datos+contador)->dia,(Datos+contador)->mes,(Datos+contador)->ano);
 
		}
}
fclose(archivo);
break;
	}
	}
}
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