Ya realicé una buena parte del programa, el problema es que cuando ingreso a un cliente ingresan 2 al mismo tiempo y no sé por que.
Aquí el código
Código:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
typedef struct nodo
{
int icliente;//se guarda el nombre del cliente
nodo *next;//puntero siguiente
}nodo;
typedef struct nodo1
{
int icliente1;//se guarda el nombre del cliente
nodo1 *next1;//puntero siguiente
}nodo1;
typedef struct nodo2
{
int icliente2;//se guarda el nombre del cliente
nodo2 *next2;//puntero siguiente
}nodo2;
nodo *cola,*fin=NULL,*inicio=NULL;
nodo1 *cola1,*fin1=NULL,*inicio1=NULL;
nodo2 *cola2,*fin2=NULL,*inicio2=NULL;
main ()
{
int x[5], i, op, n=0,n1=0,n2=0,ct=0,nc,cnc;
for (i=0;i<5;i++)
{
x[i]=0;
}
do{ system("color a");
system("CLS");
printf("=========MENU=========\n");
printf("\n 1.- Ingresar Cliente");
printf("\n 2.- Mostrar Colas");
printf("\n 3.- Despachar Cliente");
printf("\n 4.- Salir");
printf("\n\n Ingrese una opcion: ");
scanf("%d",&op);
printf("\n");
switch(op)
{
case 1:
system ("cls");
if(n<=n1 && ct<5 && n2==0)
{
cola=(nodo*)malloc(sizeof(nodo));
cola->icliente =1;
n++;
cola->next=NULL;
for (i=0;i<5;i++)
if(x[i]==0)
{
x[i]=1;
ct++;
break;
}
printf("Un cliente ha entrado en el supermercado\n");
getch();
if(fin==NULL)
inicio=fin=cola;
else
{
fin->next=cola;
fin=cola;
}
}
if (n>n1 && ct<5 && n2==0)
{
cola1=(nodo1*)malloc(sizeof(nodo1));
cola1->icliente1 =1;
n1++;
cola1->next1=NULL;
for (i=0;i<5;i++)
if(x[i]==0)
{
x[i]=1;
ct++;
break;
}
printf("Un cliente ha entrado en el supermercado\n");
getch();
if(fin1==NULL)
inicio1=fin1=cola1;
else
{
fin1->next1=cola1;
fin1=cola1;
}
}
if(n<=n1 && ct<5 && n2>0)
{
n2--;
cola2=inicio2;
cnc=cola2->icliente2;
printf("Un cliente de la cola de espera ha ingresado al supermercado");
getch();
fin2=NULL;
inicio2=cola2->next2;
if(inicio2==NULL)
{
cola2=NULL;
}
cola=(nodo*)malloc(sizeof(nodo));
cola->icliente =cnc;
n++;
cola->next=NULL;
for (i=0;i<5;i++)
if(x[i]==0)
{
x[i]=1;
ct++;
break;
}
if(fin==NULL)
inicio=fin=cola;
else
{
fin->next=cola;
fin=cola;
}
}
if(n>n1 && ct<5 && n2>0)
{
n2--;
cola2=inicio2;
cnc=cola2->icliente2;
printf("Un cliente de la cola de espera ha ingresado al supermercado");
getch();
for (i=0;i<5;i++)
if(x[i]==0)
{
x[i]=1;
ct++;
break;
}
inicio2=cola2->next2;
if(inicio2==NULL)
{
cola2=NULL;
fin2=NULL;
}
cola1=(nodo1*)malloc(sizeof(nodo1));
cola->icliente =cnc;
n++;
cola->next=NULL;
if(fin1==NULL)
inicio1=fin1=cola1;
else
{
fin1->next1=cola1;
fin1=cola1;
}
}
if(ct==5)
{
printf("No hay Carritos disponibles, el cliente debe esperar afuera hasta que se desocupe un carrito");
getch ();
cola2=(nodo2*)malloc(sizeof(nodo2));
cola2->icliente2 =1;
n2++;
cola2->next2=NULL;
if(fin2==NULL)
inicio2=fin2=cola2;
else
{
fin2->next2=cola2;
fin2=cola2;
}
}
break;
case 2:
system ("cls");
printf("Que cola desea ver?\n1. Caja 1\n2. Caja 2\n3. Cola de espera\n4. Carritos disponibles\n");
scanf("%d",&nc);
switch(nc)
{
case 1:
if(fin==NULL)
{
printf("La cola esta Vacia");
getch();
}
else
{
printf("Hay %d clientes en la caja %d\n",n,nc);
getch();
}
break;
case 2:
if(fin1==NULL)
{
printf("La cola esta Vacia");
getch();
}
else
{
printf("Hay %d clientes en la caja %d\n",n1,nc);
getch();
}
break;
case 3:
if(fin2==NULL)
{
printf("La cola esta Vacia");
getch();
}
else
{
printf("Hay %d clientes en la cola de espera\n",n2);
getch();
}
break;
case 4:
if (ct==5)
{
printf ("No hay carritos disponibles");
getch ();
}
else
{
printf("Hay %d carritos disponibles",5-ct);
getch ();
}
break;
}
break;
case 3:
system ("cls");
printf("De que caja fue despachado el cliente?\n1. Caja 1\n2. Caja 2\n");
scanf("%d",&nc);
switch(nc)
{
case 1:
if (inicio==NULL)
{
printf("No hay clientes para despachar en la caja %d",nc);
getch();
}
else
{
if(ct>0)
{
n--;
cola=inicio;
printf("Un cliente de la caja %d ha sido despachado\n",nc);
for (i=0;i<=5;i++)
if(x[i]==1)
{
x[i]=0;
ct--;
break;
}
getch();
inicio=cola->next;
if(inicio==NULL)
{
cola=NULL;
fin=NULL;
}
}
}
break;
case 2:
if (inicio1==NULL)
{
printf("No hay clientes para despachar en la caja %d",nc);
getch();
}
else
{
if(ct>0)
{
n1--;
cola1=inicio1;
printf("Un cliente de la caja %d ha sido despachado\n",nc);
for (i=0;i<=5;i++)
if(x[i]==1)
{
x[i]=0;
ct--;
break;
}
getch();
inicio1=cola1->next1;
if(inicio1==NULL)
{
cola1=NULL;
fin1=NULL;
}
}
}
}
break;
break;
}}while (op!=4);
}
Agradezco cualquier sugerencia