Bueno se me ha adelantado durasno , la proxima vez que postees , por favor pon las etiquetas GeSHi y los errores , verás que pronto acuden los usuarios a ayudar. Y lo que te venia diciendo durasno corregido , mas una cosa ¿Porqué utilizas conio.h? para hacer el getch , simplemente en vez de utilizar valores enteros de carácteres para comparar en el switch ,utiliza valores enteros que es mas fácil , y recoges la opcion con:
Te dejo el código corregido , he dejado los comentarios y eso , he añadido la función de buscar persoa para que te buscase un nombre que tu le metieses también , y los problemillas puntuales que salían
¡Un saludo!
Código (c) [Seleccionar]
scanf("%d",&opcion);
Te dejo el código corregido , he dejado los comentarios y eso , he añadido la función de buscar persoa para que te buscase un nombre que tu le metieses también , y los problemillas puntuales que salían
Código (c) [Seleccionar]
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
//#include <conio.h> Omitido , acostumbrate a no usarla...
typedef struct perso//definimos la estructura que usaremos, debemos tener cuidado de no elegir los mismo nombres
//para la definicion de la variable y para la variable
{
char nombre [30];
char apellido [30];
int edad;
struct perso *lista;
} persona;
void ingrese_persona(persona *p);//declaramos las funciones
void imprima_persona(persona *p);
persona *busca_persona(persona *listanueva,char *nombre);
persona *agregar_persona(persona*lista);
int main ()
{
int opcion=0,N=0;
persona *listanueva=NULL;
char nombpersbusc[30];//Variable para albelgar el nombre de la persona a buscar.
do //ciclo do while para evitar seleccionar un numero que no este entre las opciones
{
printf ("\n\nMenu:\n\n");
printf("Seleccione una opcion:\n\t\t");
printf("\n\n\t\t 1.-Ingresar persona");
printf("\n\t\t2.-Imprimir lista");
printf("\n\t\t3.Buscar persona");
printf("\n\t\t4.-Salir\n\n");
scanf("%d", &opcion);
//opcion=getch();//se ocupa getch() y no getchar() o si no me devuelve dos veces el menu cada vez y nos lee el caracter desde teclado, parecido a scanf
switch (opcion)
{
case 1://definimos las opciones y sus correspondientes valores
if(N<5)
{
printf("Selecciono opcion: 1\n\n");
listanueva=agregar_persona(listanueva);//llama a funcion
N++;
}
else
printf("limite de personas");
break;
case 2:
printf("Selecciono opcion: 2\n\n");
imprima_persona(listanueva);//llama para imprimri
break;
case 3:
printf("Selecciono opcion:3\n\n");
printf("Digame el nombre de la persona a buscar:");
scanf("%s",nombpersbusc);
listanueva=busca_persona(listanueva,nombpersbusc);
break;
default:
printf("seleccion no valida\n\n"); //nos evita
break;
}
}
while (opcion!=4);
return 0;
}
void ingrese_persona (persona *p)
{
printf("\nIngrese nombre: ");
scanf("%s", p->nombre);
printf("Ingrese apellido: ");
scanf("%s", p->apellido);
printf("Ingrese edad: ");
scanf("%d", &(p->edad));
p++;
p->lista=NULL;
}
void imprima_persona(persona *p)
{
persona *aux3=p;
while (aux3!=NULL)
{
printf(" %s %s (%d años)\n",aux3->nombre, aux3->apellido, aux3->edad);
aux3=aux3->lista;//definimos un puntero auxiliar para evitar que el puntero quede en nULL
}
}
persona *agregar_persona(persona *auxlista)//definicion de puntero a persona lista
{
persona *aux2lista=(persona*)malloc(sizeof(persona));//reservamos con memoria dinamica un espacio para el puntero
ingrese_persona(aux2lista);//agregamos la funcnio
aux2lista->lista=NULL;//ahora debemos usar un puntero auxiliar para que asi lista nos quede apuntando a NULL
if (auxlista==NULL)
{
auxlista=aux2lista;//si el puntero auxiliar es igual a NULL quedara apuntando a NUll
}
else
{
persona *actual=auxlista,*anterior;//creacion de dos punteros para recorrer la lista
while (actual!=NULL)
{
anterior=actual;//anterior queda apuntando a actual
actual=actual->lista;//actual apunta al siguietne
}
anterior->lista=aux2lista;//de esta forma se genera que el puntero no este apuntando a NULL si no al puntero siguiente
}
return(auxlista);//devuleve el puntero a lista
}
persona *busca_persona(persona *listanueva,char *nombre)
{
persona *auxbuscar=listanueva;
while (auxbuscar!=NULL)
{
//if (strcmp(auxbuscar->nombre,nombre)==0) Para comparar cadenas utiliza strcmp!!!!!
if(strcmp(auxbuscar->nombre,nombre)==0)
{
printf("nombre encontrado\n");
return auxbuscar;
}
auxbuscar=auxbuscar->lista;
}
printf ("no existe\n");
return auxbuscar;
}
¡Un saludo!