У меня есть это задание, в котором я должен составить программу очередей, которая подсчитывает, сколько клиентов, обслуживаемых каждым клиентом, в конце концов (эта программа имеет 2 обслуживания клиентов). Я пытаюсь с этим кодом, но когда я пытаюсь напечатать cs-> count, он ничего не дал на экран.
Для очереди я использовал общую очередь связанного списка, и я почти уверен, что она имеет в этом нет ничего плохого.
Первый код, который у меня есть, это структура adt
typedef struct{
int ID;
int time;
int count;
bool serving;
}employee;
typedef struct{
char ID[3];
int code;
int arrivalTime;
int timeNeeded;
employee servedBy;
}nasabah;
, и модули для этого объявления:
nasabah inputNasabah(nasabah *n) // to initialize customer's data
{
printf("Customer's ID : ");
scanf("%s", (*n).ID);
printf("Customer's need (type '1' for teller or '2' for Customer Service) : ");
scanf("%d", &((*n).code));
printf("Enter your arrvial time : ");
scanf("%d", &((*n).arrivalTime));
printf("Transaction time needed : ");
scanf("%d", &((*n).timeNeeded));
printf("\n");
return *n;
}
edit: теперь я думаю, что проблема начинается здесь, я серьезно не знаю, почему она не работает так, как это должно быть ..
void csInit(employee *a, employee *b) //to initialize cs's data
{
a->ID = 1;
a->time = 0;
a->count = 0;
a->serving = false;
b->ID = 2;
b->time = 0;
b->count = 0;
b->serving = false;
}
и этот (тот, который, я думаю, создает проблему). Этот модуль используется для определения того, какие службы обслуживания клиентов обслуживаются и сколько клиентов обслуживается этой службой. Мои логики c означают, что самый первый клиент перейдет к «а» (обслуживание первого клиента), и a-> обслуживание будет выполнено, а следующий клиент будет на уровне «b» (обслуживание второго клиента), так как «а» пока недоступно (при условии, что первый и второй клиенты имеют одинаковое время прибытия), и b-> обслуживание будет также верно. И затем приходит третий клиент, который будет обслуживаться одним клиентом, который имеет наименьшее время (глядя на a-> time или b-> time)
void servedByCS(nasabah *n, employee *a, employee *b)
{
csInit(a, b);
if(a->serving == false)
{
n->servedBy = *a;
a->time = a->time + n->timeNeeded;
a->count = a->count + 1;
a->serving = true;
}
else if(a->serving == true)
{
if(a->time > b->time)
{
n->servedBy = *b;
b->time = b->time + n->timeNeeded;
b->count = b->count + 1;
b->serving = true;
}
if(a->time < b->time)
{
a->serving = false;
n->servedBy = *a;
a->time = a->time + n->timeNeeded;
a->count = a->count + 1;
a->serving = true;
}
}
if (b->serving == true)
{
if (b->time < a->time)
{
b->serving = false;
}
}
}
и, наконец, мой основной драйвер содержит:
int main()
{
nasabah *n;
antre cs; //queue for customer
int i;
int amount = 0;
node a;
employee *cs1, *cs2; //since there are two customer service
printf("Input the queue lenghth : ");
scanf("%d", &amount);
n = (nasabah *) malloc(amount * sizeof(nasabah));
cs = CreateQueue(); //creating queue
for(i = 0; i < amount; i++)
{
*n = inputNasabah(n + i);
enQueue(cs, *n); //inputting customer's data into the queue
}
while(!isEmpty(cs))
{
a = deQueue(cs); //dequeue from the first customer so it can be proceed to see which customer service will be served.
servedByCS(&a.info, cs1, cs2); //i think i got this one wrong so the program didn't work
}
printf("%d", cs1->count); //i try to print how many customers are served by the cs1 (first customer service), but it didn't work.
return 0;
}