我必须编写一个程序来实现一个带有各种菜单选项的队列(这些都完成了)。我的“pop”功能有问题。
我的计划是员工餐厅候补名单。每当顾客打电话或进入餐厅时,他们都会被列入等候名单。弹出(就座)的唯一方法是客户的状态是在餐厅等候。我已经正确编写了将客户从呼入到在餐厅等候的部分。
此外,如果组大小大于桌子大小,我应该去下一个节点并检查下一个组是否符合就座标准。
enum status(WAIT,CALL);
typedef struct restaurant
{
//stuff
}list;
//I call pop in the main as follows:
pop(&head, &tail);
void pop(list** head, list** tail)
{
list* temp = *head;
int tableSize;
if(*head == *tail && *tail == NULL)
{
printf("The queue is empty... exitting program... \n");
exit(EXIT_FAILURE);
}
printf("What is the table size? ");
scanf(" %d", &tableSize);
if(temp->groupSize > tableSize || temp->waitStatus == CALL)
while(temp->groupSize > tableSize || temp->waitStatus == CALL)
temp = temp->nextNode;
else
*head = (*head)->nextNode;
if(*tail == temp)
*tail = (*tail)->nextNode;
free(temp);
}
当我显示我的输出时,如果它必须跳过队列中的第一个人,它不会删除实例中的节点。但是,当第一个人符合标准时,它确实有效。为什么是这样?