-1

抱歉所有问题,但这个功能给我带来了很多问题。我几乎完成了,但我还有最后一个错误。此功能的重点是每天一次弹出 3 个学生。一天完成,它会移动到第二天并弹出下一个 3(有移动到下一个队列列表的可能性)。我的 num2 代表一天,每次完成 3 个学生时,它应该将天增加 1。

当我运行程序时,我得到了一些奇怪的结果。如果我留在同一个队列列表上,这一天会增加,但是当我跳转时,它会卡在第一个增量上。例子:

我有两个队列列表

第一个队列列表:Rachel、Ed、Amy、Matt 第二个队列列表:John、Daniel、Nick

结果:

Day1:瑞秋、艾德、艾米

第2天:

马特,是最后一个学生... 约翰,丹尼尔,

第 2 天:

尼克,是最后一个学生。

关于为什么会发生这种情况的任何想法?

主功能

    int s = 0;
    int d = 1;
    cout<<"How many Student do you currently have appointments with? "<<endl;
    cin>>s;
    cout<<"What day would you like to start seeing students?"<<endl;
    cin>>d;
    cout<<"Day "<<d<<endl;


    s = priority1->enqueue(s,d);
    s = priority2->enqueue(s,d);
    s = priority3->enqueue(s,d);
    s = priority4->enqueue(s,d);

队列函数调用

int enqueue(int x, int& m)
{
    n->pop_front(x,m);
}

LinkList Pop_front 函数

int pop_front(int x, int& m)
    {
        int num = x;
        int num2 = m;
        string value;
        while(front != NULL)
            {   
                if(num == 3)
                {
                    num = 0;
                    num2++;
                    cout<<endl<<endl<<"Day "<<num2<<endl;
                }
                while(num<3)
                {
                    Node *temp = front;
                    if(front->next)
                    {   value = front->name;
                        front = front->next;
                        front->prev = NULL;
                        size--;
                        delete temp;
                        cout<<value<<", "<<endl;
                        num++;
                        continue;
                    }
                    cout<<endl;
                    if(front->next == NULL)
                    {
                        value=front->name;
                        front = NULL;
                        back = NULL;
                        delete temp;
                        size--;
                        cout<<value<<", is the last student in this priority Queue list"<<endl;
                        num++;
                        return num;
                    }
                }
}
    }
4

1 回答 1

2

您正在路过m,它代表天数reference

int pop_front(int x, int& m)

但是你num2在函数体中使用:

num2++;
cout<<endl<<endl<<"Day "<<num2<<endl;

因此,您不会m在每次调用enqueue. 该参考仅适用于m,当您分配mnum2您时,您正在创建一个新变量并且它们没有链接,因此num2不会反映对 的更改m

于 2013-04-02T02:20:08.287 回答