Hola! Hace un tiempo que vengo programando en C, como un curso introductorio en mi facultad, hasta el dia de hoy que me dieron una tarea que no logro hechar a andar.
Mi idea es esta:
1) Escribir el main con las opciones para escoger en el menu.
2)A traves de void realizar las distintas operaciones, dandole un puntero al void con la direccion de la estructura y el tamaño de caballeros (en el programa sale con ese nombre) se han designado a crear.
3)Mostrar los caballeros, o la lista enlazada.
Mi problema va en que cuando hago el void se pierde el vector de inicio de la estructura, y cuando quiero verla con listar_caballeros() no puedo mostrarla, y tampoco se me ocurre como hacerla.
Es una lista enlazada circular (mesa redonda).
Ademas tengo problemas cuando pongo printf y deseo mostrar lo que esta dentro de la estructura.
Si alguien me podria hechar una manito, o arreglarme el codigo, o decirme que tengo malo, o simplemente explicarme un poco del asunto, estaria muy agradecido.
El codigo es el siguiente:
__________________________________________________ _________
#include <stdio.h>
#include <stdlib.h>
//creamos la estructura
struct datos {
struct datos *anterior; //asignamos un puntero con la direccion de la estructura anterior.
char *nombre;
char *habilidad;
int asiento;
struct datos *siguiente; //asignamos un puntero en la segunda pocicion de la estructura.
}; //con la posicion de la estructura siguiente
//asignamos un puntero con la direccion de la memoria que almacena la estructura.
struct datos *direcciondatos(){
return((struct datos *)malloc(sizeof(struct datos)));
}
//Procedimiento para crear mesa redonda
void crear_mesa_redonda(struct datos *r,int n){
struct datos *p,*q;
int i,num,opc;
system("cls");
printf("CREAR MESA REDONDA\n");
printf("------------------");
printf("\n\nIngrese numero de caballeros: ");
scanf("%d",&num);
printf("\n\nIngresar datos:\n");
for(i=1;i<=num;i++){
//asignamos la direccion de la estructura al puntero
if(i==1){
p=direcciondatos();
r=p; //guardamos la direccion de la primera estructura en el puntero r
p->anterior=p; //agregamos el puntero de la estructura anterior
}
else {
p=direcciondatos();
p->anterior=q; //asignamos la direccion de la estructura
}
//pedimos al usuario los datos del caballero
printf("\nCaballero %d:",i);
printf("\n------------");
printf("\n\n\tNombre: ");
scanf("%s",&(p->nombre));
printf("\n\tHabilidad: ");
scanf("%s",&(p->habilidad));
//asignamos numero de asiento
p->asiento=i;
//asignamos direccion a estructura siguiente
if(i!=num){
q=direcciondatos(); //direccion de la siguiente estructura
p->siguiente=q;
}
else {
p->siguiente=r;
}
}
n=num; //guardamos el numero de caballeros
printf("\n\nSe ingresaron correctamente un total de %d caballeros.",i-1);
printf("\n%.4x",r);
//Opciones a seguir
printf("\n1. Listar Caballeros");
printf("\n2. Volver a Menu Principal");
printf("\n\nIngrese numero de opcion a seguir: ");
scanf("%d",&opc);
if(opc==1)
;//listar_caballeros();
else if(opc==2)
main();
return;
}
//Procedimiento para mostrar la lista de caballeros
void listar_caballeros(struct datos *p,int n){
struct datos *q;
int i=1,opc;
// while(p->asiento!=(n+1)){
printf("Caballero %d:",i);
printf("\nAnterior: %.4x",p->anterior);
printf("\nAsiento: %d",p->asiento);
printf("\nNombre: %c",p->nombre);
printf("\nHabilidad: %c",p->habilidad);
printf("\nSiguiente: %.4x\n\n",p->siguiente);
q=p->siguiente;
printf("Caballero %d:",i);
printf("\nAnterior: %.4x",q->anterior);
printf("\nAsiento: %d",q->asiento);
printf("\nNombre: %c",q->nombre);
printf("\nHabilidad: %c",q->habilidad);
printf("\nSiguiente: %.4x\n\n",q->siguiente);
//}
//Opciones a seguir
printf("\n1. Volver a Menu Principal");
printf("\n\nIngrese numero de opcion a seguir: ");
scanf("%d",&opc);
if(opc==1)
main();
return;
}
int main(){
struct datos *pdatos;
int num,opc;
//presentacion
system("cls");
printf("Segunda Tarea Sistemas de Computacion - DIE\n");
printf("-------------------------------------------\n\n");
printf("Opciones:");
printf("\n\n\t1. Crear Mesa Redonda");
printf("\n\t2. Editar Mesa Redonda");
printf("\n\t3. Listar Caballeros");
printf("\n\t4. Ingresar Numero Aleatorio");
printf("\n\t5. Comenzar Seleccion");
printf("\n\t6. Salir");
pdatos=direcciondatos();
printf("\n%.4x",pdatos);
printf("\n\nIngrese numero de opcion a seguir:");
scanf("%d",&opc);
//direccion de memoria para el puntero cabeza de la estructura
//opciones
if(opc==1)
crear_mesa_redonda(&pdatos,num);
if(opc==3)
listar_caballeros(&pdatos,num);
else if(opc==6){
printf("\nHasta pronto...\n\n");
system("PAUSE");
}
return(0);
}
__________________________________________________ _______
De todas maneras, gracias!.