alguien podría ayudarme en la Compilación de este programa que me da errores y warning en la programación:
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
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;
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\n\t\t 1.-Ingresar persona\n \t\t2.-Imprimir lista\n\t\t3.-Salir\n\n");
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
else
{
printf("limite de personas");
}
N++;
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("fin programa\n\n");
break;
case '4':
listanueva=busca_persona(listanueva);
default:
printf("seleccion no valida\n\n"); //nos evita
break;
}
}
while (opcion!='3');
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 (auxbuscar->nombre==nombre)
{
printf("nombre encontrado\n");
return auxbuscar;
}
auxbuscar=auxbuscar->lista;
}
printf ("no co existe\n");
return auxbuscar;
}
atte: xtreme
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
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;
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\n\t\t 1.-Ingresar persona\n \t\t2.-Imprimir lista\n\t\t3.-Salir\n\n");
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
else
{
printf("limite de personas");
}
N++;
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("fin programa\n\n");
break;
case '4':
listanueva=busca_persona(listanueva);
default:
printf("seleccion no valida\n\n"); //nos evita
break;
}
}
while (opcion!='3');
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 (auxbuscar->nombre==nombre)
{
printf("nombre encontrado\n");
return auxbuscar;
}
auxbuscar=auxbuscar->lista;
}
printf ("no co existe\n");
return auxbuscar;
}
atte: xtreme
Código (cpp) [Seleccionar]
[code=cpp][code=cpp][code=cpp][code=c][code=cpp]
[/code][/code][/code][/code][/code]hope