C/Visual C - errores que tengo en mi programa y no se que hacer me ayudan a resolverlo por favor

   
Vista:

errores que tengo en mi programa y no se que hacer me ayudan a resolverlo por favor

Publicado por manerik (7 intervenciones) el 09/03/2015 23:56:57
(me podrian ayudar a resolverlo solo quitarle los errores para que me corra en la pc )
/*haga un programa en c que maneje el concepto de lista con los sig datos de un alumno : nombre , ci, tlf y email-alumno, -
donde debe despegar como menu los sig temas
1 ingreso de un alumno
2mostrar los datos de los alumnos ingresados(nombre y ci)
3 buscar un alumno en especifico por ci y despegar todos sus datos si existe
4modificar un alumno, preguntar si es por ci o por nombre .(modificar todo, )
5eliminar un registro completo por ci o por nombre
7eliminar*/ (me podrian ayudar a resolverlo solo quitarle los errores para que me corra en la pc )

# include <stdio.h>
# include <stdlib.h>
# include <string.h>
struct nodo
{
int dato;
char nom[50];
char ci[9] ;
char tlf[11];
char email[50];
struct nodo* sig;
};
struct nodo* inicio ( char nom[80], char tel[9], char email[50], int i);
struct nodo* final;
struct nodo* nuevo;
struct nodo* aux;
struct nodo* ref;
main()
{
char nom[50];char ci[9];char tlf[11]; char email[50];
char a[50];
int i,opc,resp,num,nv ,z,band=0,cont, b[9],n=0;
do
{
printf("\n\1- Nuevo Ingreso");
printf("\n\2- Mostrar Alumnos Ingresados ");
printf("\n\3- Buscar un alumno en especifico");
printf("\n\4- Modificar datos de un alumno");
printf("\n\5- Eliminar un registro");
printf("\n\6- Salir");
printf("\nopcion: ");
scanf("%d",&resp);
switch(resp)
{
case 1:
nuevo=(struct nodo*)malloc(sizeof(struct nodo));
printf("Ingrese Nombre: ");
scanf("%s",&nuevo->nom);
printf("ingrese cédula");
scanf ("%s",&nuevo->ci );
printf("ingrese teléfono");
scanf ("%s",&nuevo->tlf );
printf("ingrese e-mail");
scanf ("%s",&nuevo->email );
nuevo->sig=NULL;
if(inicio==NULL)
{
inicio=nuevo;
final=nuevo;
}
else
{
final->sig=nuevo;
final=nuevo;
}
n++;
break;
case 2:
aux=inicio;
while(aux!=NULL)
{
printf("%s", aux->nom);
printf("%d", aux->ci);
aux=aux->sig;
}
if(inicio==NULL)
printf("esta vacio\n");
break;
case 3:
do
{
printf ("seleccione tipo de busqueda");
printf("\n\1- Buscar por nombre");
printf("\n\2- Buscar por cedula ");
printf("\n\3- Salir");
printf("\nopcion: ");
scanf("%d",&opc);
switch(opc)
{
case 1:
printf("ingrese nombre");
scanf ("%s", a);
for (i=0; i<n; i++)
{
z=strcpm(a, nodo[i].nom);
if (z==0)
{
printf("el nombre es:%s\n", nodo[i]->nom);
printf("la cedula es:%d\n",nodo[i]->ci);
printf("el telefono es%d\n",nodo[i]->tlf);
printf("el email es:%s\n", nodo[i]->email);
}
else
printf("no se encuentra registrado\n");
}
break;
case 2:
printf ("ingrese cedula");
scanf("%d",&b);
for (i=0;i<n;i++)
if(b==ci)
break;
}
}
case 4:
printf("Diga el numero a modificar: ");
scanf("%d",&num);
aux=inicio;
while(aux!=NULL)
{
if(aux->dato==num)
{
printf("\nDiga el nuevo valor: ");
scanf("%d",&nv);
aux->dato=nv;
band=1;
}
aux=aux->sig;
}
if(band==0)
printf("\n Dato no Encontrado\n");
break;
case 5:
printf("Diga el registro a eliminar: ");
scanf("%d",&num);
aux=inicio;
ref=inicio;
cont=0;
band=0;
while(aux!=NULL)

if(aux->dato==num)
{
band=1;
if(cont==0)
inicio=aux->sig;
else
ref->sig=aux->sig;
}
ref=aux;
aux=aux->sig;
cont++;
}
if(band==0)
printf("\n Dato no Encontrado\n");
break;
case 6:
printf("\nFin de Programa\n");
break;
}while(resp!=6);
}
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

errores que tengo en mi programa y no se que hacer me ayudan a resolverlo por favor

Publicado por agustin (181 intervenciones) el 10/03/2015 09:00:08
si buscas por internet por "c lista enlazada simple" encontrarás mucha informacion y codigos de ejemplo. De todos modos, hace poco ayudé a alguien a resolver algo parecidoy todabia lo tengo en el pc. Luego te lo pongo.
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

errores que tengo en mi programa y no se que hacer me ayudan a resolverlo por favor

Publicado por manerik zencui-20009@hotmail.com (7 intervenciones) el 10/03/2015 17:12:36
pasamelo por favor mano
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

errores que tengo en mi programa y no se que hacer me ayudan a resolverlo por favor

Publicado por agustin (181 intervenciones) el 11/03/2015 12:04:13
Aquí lo tienes, espero te sirva de 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
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
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define SIZE_MAX_CADENA 30
//-----------------------------------------------------------------------------
/* DEFINICION DE TIPOS */
typedef struct ElementoLista
{
  int indice;
  char nombre[SIZE_MAX_CADENA];
  char primerApellido[SIZE_MAX_CADENA];
  char segundoApellido[SIZE_MAX_CADENA];
  struct ElementoLista *sig;
}Elemento;
 
typedef struct ListaIdentificar {
   Elemento *inicio;
   Elemento *fin;
   int nElementos;
}Lista;
//-----------------------------------------------------------------------------
 
/* PROTOTIPOS DE FUNCIONES */
void Inicializacion (Lista *lista);
int InsertarEnLista (Lista *lista, Elemento * actual, int indice, char *nombre, char *primerApellido, char *segundoApellido);
int Sup_inicio (Lista *lista);
int SupNodoPorNombre (Lista *lista);
int SupNodoPorID (Lista *lista);
void VaciarLista (Lista *lista);
void ImprimirLista (Lista *lista);
int Menu(void);
Elemento* Swap(Elemento *primero, Elemento *segundo);
void OrdenarListaPorID(Lista *lista);
void OrdenarListaPorNombres(Lista *lista);
int AgregarNodo(Lista *lista);
void BuscarID(Lista *lista);
void BuscarNombre(Lista *lista);
//-----------------------------------------------------------------------------
 
int main()
{
   Lista *lista;
   int retval;
 
   system ("color b");
   if ((lista = (Lista *) malloc (sizeof (Lista))) != NULL){
      Inicializacion(lista);
 
      do{
         retval = Menu();
 
         switch(retval)
         {
            case 1:
               AgregarNodo(lista);
               break;
            case 2:
               OrdenarListaPorID(lista);
               break;
            case 3:
               OrdenarListaPorNombres(lista);
               break;
            case 4:
               ImprimirLista(lista);
               break;
            case 5:
               BuscarID(lista);
               break;
            case 6:
               BuscarNombre(lista);
               break;
            case 7:
               SupNodoPorNombre(lista);
               break;
            case 8:
               SupNodoPorID(lista);
            case 9:
               VaciarLista(lista);
               break;
            case 0:
               retval=0;
               break;
            default:
               printf("\nOpcion desconocida. Vuelve a intentarlo.");
         }
      }while(retval != 0);
 
      VaciarLista(lista);
      free(lista);
   }
   return 0;
}
//-----------------------------------------------------------------------------
 
void Inicializacion (Lista *lista)
{
   lista->inicio=NULL;
   lista->fin=NULL;
   lista->nElementos=0;
}
//-----------------------------------------------------------------------------
 
/*inserción en la lista */
int InsertarEnLista (Lista *lista, Elemento *actual, int indice, char *nombre, char *primerApellido, char *segundoApellido)
{
   Elemento *nuevo_elemento;
   int retval;
 
   if ((nuevo_elemento = (Elemento *) malloc (sizeof (Elemento))) == NULL){
      printf("\nNo se pudo agregar el nuevo elemento a la lista. Hubo un error al obtener memoria.\n");
      retval=-1;
   }else{
      memset(nuevo_elemento, 0, sizeof(nuevo_elemento));
      strcpy(nuevo_elemento->nombre, nombre);
      strcpy(nuevo_elemento->primerApellido, primerApellido);
      strcpy(nuevo_elemento->segundoApellido, segundoApellido);
      nuevo_elemento->indice = indice;
 
      if(actual != NULL)
         actual->sig = nuevo_elemento;
      nuevo_elemento->sig = NULL;
 
      if(lista->inicio == NULL)
         lista->inicio = nuevo_elemento;
      lista->fin = nuevo_elemento;
      lista->nElementos++;
      retval=0;
   }
   return retval;
}
//-----------------------------------------------------------------------------
 
/* eliminación al inicio de la lista */
int SupNodoPorNombre (Lista *lista)
{
   Elemento *sup_elemento;
   Elemento *anterior=NULL;
   int encontrado=0, retval;
   char nombre[SIZE_MAX_CADENA];
 
   if (lista->nElementos == 0){
      printf("\nLa lista esta vacia.\n");
      retval=-2;
   }else{
      system("CLS");
      memset(nombre, 0, SIZE_MAX_CADENA);
      printf("Introduce el nombre a buscar: ");
      scanf("%s",nombre);
      sup_elemento = lista->inicio;
 
      do
      {
         if(sup_elemento != NULL){
            if(strcmp(sup_elemento->nombre, nombre)==0){
               encontrado=1;
            }else{
               anterior=sup_elemento;
               sup_elemento = sup_elemento->sig;
            }
         }
      }while(encontrado == 0 && sup_elemento != NULL);
 
      if(encontrado == 1){
         if(anterior == NULL)
            lista->inicio = lista->inicio->sig;
         else
            anterior->sig = anterior->sig->sig;
 
         if(lista->nElementos == 1)
            lista->fin = NULL;
         else if(sup_elemento == lista->fin)
            lista->fin = anterior;
 
         free (sup_elemento);
         lista->nElementos--;
         printf("\nElemento de la lista eliminado correctamente.\n");
         retval=0;
      }else{
         printf("\nID no encontrado.\n");
         retval=-1;
      }
   }
   system("PAUSE");
   return retval;
}
//-----------------------------------------------------------------------------
 
int SupNodoPorID (Lista *lista)
{
   Elemento *sup_elemento;
   Elemento *anterior=NULL;
   int encontrado=0, retval;
   int indice;
 
   if (lista->nElementos == 0){
      printf("\nLa lista esta vacia.\n");
      retval=-2;
   }else{
      system("CLS");
      printf("Introduce el ID a buscar: ");
      scanf("%d",&indice);
      sup_elemento = lista->inicio;
 
      do
      {
         if(sup_elemento != NULL){
            if(sup_elemento->indice, indice){
               encontrado=1;
            }else{
               anterior=sup_elemento;
               sup_elemento = sup_elemento->sig;
            }
         }
      }while(encontrado == 0 && sup_elemento != NULL);
 
      if(encontrado == 1){
         if(anterior == NULL)
            lista->inicio = lista->inicio->sig;
         else
            anterior->sig = anterior->sig->sig;
 
         if (lista->nElementos == 1)
            lista->fin = NULL;
         else if(sup_elemento == lista->fin)
            lista->fin = anterior;
 
         free (sup_elemento);
         lista->nElementos--;
         printf("\nElemento de la lista eliminado correctamente.\n");
         retval=0;
      }else{
         printf("\nNombre no encontrado.\n");
         retval=-1;
      }
   }
   system("PAUSE");
   return retval;
}
//-----------------------------------------------------------------------------
 
/* eliminación al inicio de la lista */
int Sup_inicio (Lista *lista)
{
   Elemento *sup_elemento;
   int retval;
   if (lista->nElementos == 0){
      retval=-1;
   }else{
      sup_elemento = lista->inicio;
      lista->inicio = lista->inicio->sig;
 
      if (lista->nElementos == 1)
         lista->fin = NULL;
      free (sup_elemento);
      lista->nElementos--;
      retval=0;
   }
   return retval;
}
//-----------------------------------------------------------------------------
 
/* destruir la lista */
void VaciarLista (Lista *lista)
{
   while (lista->nElementos > 0)
      Sup_inicio (lista);
   printf("\nLista vaciada satisfactoriamente.\n");
   system("PAUSE");
}
//-----------------------------------------------------------------------------
 
/* visualización de la lista */
void ImprimirLista (Lista *lista)
{
   Elemento *actual;
 
   system("CLS");
   actual = lista->inicio;
 
   while (actual != NULL){
      printf ("ID: %d %s %s %s\n", actual->indice, actual->nombre, actual->primerApellido, actual->segundoApellido);
      actual = actual->sig;
   }
   printf("\n");
   system("PAUSE");
}
//-----------------------------------------------------------------------------
 
//Intercambia el contenido de dos elementos de la lista y nos devuelve el puntero al primero
//Hay que hacer que los punteros sig apunten adonde deben ya que si no es así la lista se
//rompería. Para eso uso sigAux para, una vez intercambiados los elementos, intercambiar
//sus punteros sig
Elemento * Swap(Elemento *primero, Elemento *segundo)
{
   Elemento *aux, *sigAux;
 
   aux = primero;
   sigAux = segundo->sig;
   primero = segundo;
   segundo = aux;
   segundo->sig = sigAux;
   primero->sig = segundo;
 
   return primero;
}
//-----------------------------------------------------------------------------
 
//Ordena el contenido de la lista
void OrdenarListaPorID(Lista *lista)
{
   int i,j;
   Elemento *actual, *anterior;
 
   for (i=1; i < lista->nElementos; i++)
   {
      for (j=0, actual = lista->inicio, anterior = NULL; j < lista->nElementos-(i); j++, actual = actual->sig)
      {
         if (actual->indice > actual->sig->indice)
         {
            //Si el elemento actual es el primero de la lista pongo al que apunta el puntero
            //sig del actual como inicio ya que serán intercambiados
            if(actual == lista->inicio)
               lista->inicio = actual->sig;
 
            //Si el puntero sig de actual es el mismo que el fin de la lista pongo al actual
            //como fin ya que voy a intercambiarlos
            if(actual->sig == lista->fin)
               lista->fin = actual;
 
            //Intercambio los elementos
            actual = Swap(actual,actual->sig);
 
            //Si anterior es igual a NULL será porque actual es el primer elemento de la lista
            //y por lo tanto no existe un elemento anterior
            //Si no es NULL actualizo el puntero sig del elemento anterior al nuevo elemento
            //actual despues del intercambio
            if(anterior != NULL)
               anterior->sig = actual;
         }
         //Guardo el puntero al elemento actual para la siguiente pasada
         anterior = actual;
      }
   }
   printf("\nOrdenacion terminada.\n");
   system("PAUSE");
}
//-----------------------------------------------------------------------------
 
//Ordena el contenido de la lista
void OrdenarListaPorNombres(Lista *lista)
{
   int i,j,k;
   Elemento *actual, *anterior;
   int largoNombreA, largoNombreB, largoMax, cambiar;
 
   for(i=1; i < lista->nElementos; i++)
   {
      for(j=0, actual = lista->inicio, anterior = NULL; j < lista->nElementos-(i); j++, actual = actual->sig)
      {
         largoNombreA = strlen(actual->nombre);
         largoNombreB = strlen(actual->sig->nombre);
 
         if(largoNombreA < largoNombreB)
            largoMax = largoNombreA;
         else if(largoNombreB < largoNombreA)
            largoMax = largoNombreB;
         else
            largoMax = largoNombreA;
 
         for(k=0; k<largoMax; k++)
         {
            if(actual->nombre[k] > actual->sig->nombre[k]){
               cambiar=1;
               break;
            }else if(actual->nombre[k] < actual->sig->nombre[k]){
               cambiar=0;
               break;
            }
         }
 
         if(cambiar == 1)
         {
            //Si el elemento actual es el primero de la lista pongo al que apunta el puntero
            //sig del actual como inicio ya que serán intercambiados
            if(actual == lista->inicio)
               lista->inicio = actual->sig;
 
            //Si el puntero sig de actual es el mismo que el fin de la lista pongo al actual
            //como fin ya que voy a intercambiarlos
            if(actual->sig == lista->fin)
               lista->fin = actual;
 
            //Intercambio los elementos
            actual = Swap(actual,actual->sig);
 
            //Si anterior es igual a NULL será porque actual es el primer elemento de la lista
            //y por lo tanto no existe un elemento anterior
            //Si no es NULL actualizo el puntero sig del elemento anterior al nuevo elemento
            //actual despues del intercambio
            if(anterior != NULL)
               anterior->sig = actual;
         }
         //Guardo el puntero al elemento actual para la siguiente pasada
         anterior = actual;
      }
   }
   printf("\nOrdenacion terminada.\n");
   system("PAUSE");
}
//-----------------------------------------------------------------------------
 
int AgregarNodo(Lista *lista)
{
   int retval,indice;
   char nombre[SIZE_MAX_CADENA], primerApellido[SIZE_MAX_CADENA], segundoApellido[SIZE_MAX_CADENA];
 
   memset(nombre,0, SIZE_MAX_CADENA);
   memset(primerApellido,0, SIZE_MAX_CADENA);
   memset(segundoApellido,0, SIZE_MAX_CADENA);
 
   system("CLS");
   printf("ID: ");
   scanf("%d", &indice);
   printf("Nombre: ");
   scanf("%s", nombre);
   printf("Primer apellido: ");
   scanf("%s", primerApellido);
   printf("Segundo apellido: ");
   scanf("%s", segundoApellido);
 
   if(InsertarEnLista(lista,lista->fin, indice, nombre, primerApellido, segundoApellido) == -1){
      printf("\nError al insertar un elemento a la lista. Pulsa intro para salir.\n\n");
      retval = -1;
   }else{
      printf("\nSe ha insertado el elemento a la lista. Pulsa intro para continuar.\n\n");
      retval = 0;
   }
   system("PAUSE");
   return retval;
}
//-----------------------------------------------------------------------------
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

errores que tengo en mi programa y no se que hacer me ayudan a resolverlo por favor

Publicado por agustin (181 intervenciones) el 11/03/2015 12:05:57
Esta parte va detras de la otra. Lo hago así porque no cabe en un solo mensaje:

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
int Menu()
{
   int resp;
 
   system ("color b");
   system("cls");
   printf("\n\n\t\t\t* * * * * MENU DE OPCIONES * * * * *");
   printf("\n\t\t---------------------------------------------------");
   printf("\n\t\t\t\t       AGENDA ");
   printf("\n\t\t---------------------------------------------------\n\n");
   printf("\t\t\t (1) Agregar contacto \n");
   printf("\t\t\t (2) Ordenar agenda por ID's \n");
   printf("\t\t\t (3) Ordenar agenda por nombres \n");
   printf("\t\t\t (4) Imprimir listado completo \n");
   printf("\t\t\t (5) Buscar un ID en el listado \n");
   printf("\t\t\t (6) Buscar un nombre en el listado \n");
   printf("\t\t\t (7) Eliminar nodo por nombre \n");
   printf("\t\t\t (8) Eliminar nodo por ID \n");
   printf("\t\t\t (9) Eliminar listado completo \n");
   printf("\t\t\t (0) salir\n\n");
   printf("\t\t\t Opcion: ");
 
   scanf("%d", &resp);
 
   return resp; //Devuelvo su valor entero
}
//-----------------------------------------------------------------------------
 
void BuscarID(Lista *lista)
{
   Elemento *actual;
   int indice, encontrado=0;
 
   system("CLS");
   actual = lista->inicio;
 
   printf("Introduce el ID a buscar: ");
   scanf("%d", &indice);
 
   while (actual != NULL){
      if(actual->indice == indice){
         printf ("ID: %d %s %s %s\n", actual->indice, actual->nombre, actual->primerApellido, actual->segundoApellido);
         encontrado=1;
      }
      actual = actual->sig;
   }
 
   if(encontrado == 0)
      printf("\nNo se encontro ninguna coincidencia.\n");
   else
      printf("\n");
 
   system("PAUSE");
}
//-----------------------------------------------------------------------------
 
void BuscarNombre(Lista *lista)
{
   Elemento *actual;
   char nombre[SIZE_MAX_CADENA];
   int encontrado=0;
 
   system("CLS");
   actual = lista->inicio;
 
   printf("Introduce el nombre a buscar: ");
   scanf("%s", nombre);
 
   while (actual != NULL){
      if(strcmp(actual->nombre, nombre) == 0){
         printf ("ID: %d %s %s %s\n", actual->indice, actual->nombre, actual->primerApellido, actual->segundoApellido);
         encontrado=1;
      }
      actual = actual->sig;
   }
 
   if(encontrado == 0)
      printf("\nNo se encontro ninguna coincidencia.\n");
   else
      printf("\n");
 
   system("PAUSE");
}
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