C/Visual C - Correccion de programa en c++

 
Vista:

Correccion de programa en c++

Publicado por Melany (2 intervenciones) el 28/07/2014 00:49:10
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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
 
#define MAXCADENA 200
 
enum{Ver=1, Alta, Buscar, Salir};
 
struct Entrada {
	char*nombre;
   char*direccion;
   char*telefono;
};
 
struct NodoAgenda{
	struct Entrada datos;
   struct NodoAgenda*sig;
};
 
typedef struct NodoAgenda*TipoAgenda;
 
void quita_fin_de_linea(char linea[])
{
	int i;
   for(i=0;linea[i]!='\0';i++)
   	if(linea[i]=='\n'){
      	linea[i]='\0';
         break;
      }
}
 
void muestra_entrada(struct NodoAgenda*e)
	//Podriamos haber pasado e por valor, peroresulta mas eficiente(y no mucho mas
   //incomodo) hacerlo por referencia: pasamos asi solo 4 bytes en lugar de 12.
 
   {
   	printf("Nombre   : %s\n", e->datos.nombre);
      printf("Direccion: %s\n", e->datos.direccion);
      printf("Telefono : %s\n", e->datos.telefono);
   }
 
   void libera_entrada(struct NodoAgenda*e)
   {
   int i;
 
   free(e->datos.nombre);
   free(e->datos.direccion);
   free(e->datos.telefono);
   free(e);
   }
 
TipoAgenda crea_agenda(void)
	{
   	return NULL;
   }
 
TipoAgenda anyadir_entrada(TipoAgenda agenda, char nombre[], char direccion[], char telefono[])
 
{
struct NodoAgenda *aux,*e;
 
/*Averiguar si yatenemos una persona con ese nombre*/
 
 
 
if(buscar_entrada_por_nombre(agenda, nombre)!=NULL)
	return agenda;
 
/*Si llegamos aqui, es porque no teniamos registrada a esa persona.*/
e=(struct NodoAgenda*)malloc(sizeof(struct NodoAgenda));
e->datos.nombre=(char*)malloc((strlen(nombre)+1)*sizeof(char));
strcpy(e->datos.nombre, nombre);
e->datos.direccion=(char*)malloc((strlen(direccion)+1)*sizeof(char));
strcpy(e->datos.direccion, direccion);
e->datos.telefono=(char*)malloc((strlen(telefono)+1)*sizeof(char));
strcpy(e->datos.telefono, telefono);
e->sig=agenda;
agenda=e;
return agenda;
}
 
void muestra_agenda(TipoAgenda agenda)
{
	struct NodoAgenda*aux;
 
   for(aux=agenda; aux!=NULL; aux=aux->sig)
	muestra_entrada(aux);
}
 
 
struct NodoAgenda *buscar_entrada_por_nombre(TipoAgenda agenda, char nombre[])
{
	struct NodoAgenda*aux;
 
   for(aux=agenda; aux!=NULL; aux=aux->sig)
		if(strcmp(aux->datos.nombre,nombre)==0)
      	return aux;
 
   return NULL;
}
 
void libera_agenda(TipoAgenda agenda)
{
	struct NodoAgenda*aux, *siguiente;
 
   aux=agenda;
   while(aux!=NULL){
		siguiente=aux->sig;
      libera_entrada(aux);
      aux=siguiente;
   }
}
 
void escribe_agenda(TipoAgenda agenda, char nombre_fichero[])
{
 
	struct NodoAgenda*aux;
   FILE*fp;
 
   fp=fopen(nombre_fichero,"w");
   for(aux=agenda; aux!=NULL; aux=aux->sig)
   	fprintf(fp, "%s\n%s\n%s\n", aux->datos.nombre,aux->datos.direccion,aux->datos.telefono);
   fclose(fp);
}
 
TipoAgenda lee_agenda(char nombre_fichero[])
{
	TipoAgenda agenda;
   struct Entrada*entrada_leida;
   FILE*fp;
   char nombre[MAXCADENA+1], direccion[MAXCADENA+1],telefono[MAXCADENA+1];
   int longitud;
 
   agenda=crea_agenda();
 
   fp=fopen(nombre_fichero, "r");
   while(1){
   fgets(nombre, MAXCADENA, fp);
   if(feof(fp))break; //Si se acabo el fichero,acabar la lectura.
   quita_fin_de_linea(nombre);
 
   fgets(direccion, MAXCADENA, fp);
   quita_fin_de_linea(direccion);
 
   fgets(telefono, MAXCADENA, fp);
   quita_fin_de_linea(telefono);
 
   agenda= anyadir_entrada(agenda, nombre, direccion, telefono);
}
fclose(fp);
 
return agenda;
}
 
/***************************************************************************
*Programa principal
********************************************************************************/
 
int main(void)
{
	TipoAgenda miagenda;
   struct NodoAgenda*encontrada;
 
int opcion;
 
char nombre[MAXCADENA+1];
char direccion[MAXCADENA+1];
char telefono[MAXCADENA+1];
char linea[MAXCADENA+1];
 
miagenda=lee_agenda("agenda.txt");
 
do{
printf("Menu:\n");
printf("1) Ver contenido completo de la agenda.\n");
printf("2) Darde alta una persona.\n");
printf("3) Buscar telefonos de una persona.\n");
printf("4) salir.\n");
printf("Opcion: ");
gets(linea); sscanf(linea, "%d", &opcion);
 
switch(opcion){
 
case Ver:
	muestra_agenda(miagenda);
   break;
 
case Alta:
	printf("Nombre: "); gets(nombre);
   printf("Direccion: "); gets(direccion);
   printf("Telefono: "); gets(telefono);
   miagenda=anyadir_entrada(miagenda, nombre, direccion, telefono);
   break;
 
case Buscar:
	printf("Nombre: "); gets(nombre);
   encontrada=buscar_entrada_por_nombre(miagenda, nombre);
   if(encontrada== NULL)
   	printf("No hay nadie llamado %s en la agenda.\n", nombre);
      else
      	muestra_entrada(encontrada);
      break;
   }
} while(opcion!=Salir);
 
 
escribe_agenda(miagenda, "agenda.txt");
libera_agenda(miagenda);
getch();
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

Correccion de programa en c++

Publicado por Tom (619 intervenciones) el 29/07/2014 16:23:08
Y ¿ qué le pasa ?
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
Imágen de perfil de Francisco

Correccion de programa en c++

Publicado por Francisco (7 intervenciones) el 01/08/2014 15:15:50
Saludos:

Ya estoy revisando su codigo, por lo pronto me di cuenta que no declaro el prototipo de la funcion buscar_entrada_por_nombre y ademas le sobra la palabra "struct" al inicio de la misma. tambien le faltaba un asterisco en el prototipo. En cuanto termine, subo el codigo corregido.
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
Imágen de perfil de Francisco

Correccion de programa en c++

Publicado por Francisco (7 intervenciones) el 01/08/2014 15:48:38
Listo, todo el problema era la funcion buscar_entrada_por_nombre, ya funciona con los cambios que le hice, digame si encuentra otro problema. Utilice Dev c++ version 4.9.9.2 en Windows 7.
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