#include <stdio.h> 
#include <conio.h> 
#include <stdlib.h> 
typedef struct nodo {
   char nombre[20];
   int cedula;
   float precio;
   struct nodo *siguiente;
} tipoNodo;
typedef tipoNodo *pNodo;
typedef tipoNodo *Lista;
Lista lista = NULL;
void InCompra ();
void Insertar(Lista *plista, char nom[20],int pci,float ppre);
int ListaVacia(Lista plista);
void BorrarLista(Lista *);
void MostrarLista(Lista plista);
void Borrar (Lista *plista, int bci);
void InBorrar(){
   
   int c=0;
   printf("Cedula de Comprador a Borra:          ");
   scanf("%d",&c);
   Borrar(&lista,c);
   printf("\n\nComprador Eliminado\n\n");
   
      
}
void mostrar_menu() { 
   printf("\n\nMenu:\n=====\n\n"); 
   printf("1.- Agregar Compra\n"); 
   printf("2.- Borrar Compra\n"); 
   printf("3.- Mostrar Lista de Compras\n"); 
   printf("4.- Salir\n\n"); 
   printf("Escoge una opcion: "); 
   printf("\n \n ");
} 
void InCompra(){
   
   char n[20];
   int c;
   float pe;
   printf("\n \n");
   printf("Nueva Compra");
   printf("\n \n");
   printf("Nombre:    ");
   scanf("%20[^\n]",n);
   printf("Cedula:    ");
   scanf("%d",&c);
   printf("\n");
   printf("Precio de Compra:    ");
   scanf("%f",&pe);
   printf("\n");      
   printf("===========================================================");
   printf("\n \n");
   Insertar(&lista, n,c,pe);
   }
void Borrar(Lista *lista, int v) {
   pNodo anterior, nodo;
   
   nodo = *lista;
   anterior = NULL;
   while(nodo && nodo->cedula < v) {
      anterior = nodo; 
      nodo = nodo->siguiente;
   }
   if(!nodo || nodo->cedula != v) return;
   else { /* Borrar el nodo */
      if(!anterior) /* Primer elemento */
         *lista = nodo->siguiente;
      else  /* un elemento cualquiera */
         anterior->siguiente = nodo->siguiente;
      free(nodo);
   }   
}
void Insertar(Lista *lista, char no[20],int ci, float pre) {
   pNodo nuevo, anterior;
   /* Crear un nodo nuevo */
   
   nuevo = (pNodo)malloc(sizeof(tipoNodo));
   nuevo->nombre[20] = no[20];
   nuevo->cedula = ci;
   nuevo->precio = pre;
   /* Si la lista está vacía */
   if(ListaVacia(*lista) || (*lista)->precio > pre) {
      /* Añadimos la lista a continuación del nuevo nodo */
      nuevo->siguiente = *lista;
      /* Ahora, el comienzo de nuestra lista es el nuevo nodo */
      *lista = nuevo;
   } else {
      /* Buscar el nodo de valor menor a v */
      anterior = *lista;
      /* Avanzamos hasta el último elemento o hasta que el siguiente tenga
      un valor mayor que v */
      while(anterior->siguiente && anterior->siguiente->precio <=pre)
         anterior = anterior->siguiente;
      /* Insertamos el nuevo nodo después del nodo anterior */
      nuevo->siguiente = anterior->siguiente;
      anterior->siguiente = nuevo;
   }
   
}
int ListaVacia(Lista lista) {
   return (lista == NULL);
}
void BorrarLista(Lista *lista) {
   pNodo nodo;
   while(*lista) {
      nodo = *lista;
      *lista = nodo->siguiente;
      free(nodo);
   }
}
void MostrarLista(Lista lista) {
   pNodo nodo = lista;
   if(ListaVacia(lista)) printf("Lista vacia\n");
   else {
      printf("\nListado General\n");
      while(nodo) {
         printf("-> Nombres: %s     -> Cedula: %d  Precio: %.2f -> \n",nodo->nombre,nodo->cedula,nodo->precio);
         nodo = nodo->siguiente;
      }
      printf("\n");
   }
}
   
int main() {
      
   char opcion;
   
   
   do { 
      mostrar_menu(); 
      opcion = getch(); 
      switch ( opcion ) { 
      case '1': InCompra(); 
         break; 
      case '2':InBorrar(); 
         break; 
      case '3':MostrarLista(lista); 
         break; 
      case '4': exit( 1 ); 
      default: printf( "Opcion no valida\n" ); 
         break; 
      } 
   } while (opcion!='4'); 
   return 0;
   
}
Al mostrar lista... me los nombres aparecen unas letras raras


 
  




 Autor
 Autor
		


 En línea
									En línea
								
 
              






 
						