adcasdcasdcas 2018-04-24 13:06 采纳率: 100%
浏览 884
已采纳

C++程序中值突然改变的问题,CodeBlocks 17.12,win10

使用CodeBlocks 17.12版本,win10系统。

下面main函数中的while循环内部的两个Q.display()输出的内容不同,期间只是cin了一个数,不知道是什么原因。(Q.display()输出的是theQueue的前size个数值)

还有enqueue函数中的sequence的值也会莫名其妙的改变,不懂。。

求教~

#include <iostream>

using namespace std;
class Queue
{
public:
    Queue(int theSize);
    bool enqueue(int number);
    int dequeue();
    int peek(int number) const;
    int getSize()  const;
    void display()  const;
private:
    int size;
    int theQueue[];
    int sequence;//记录当前入列的元素位置。
};
int main()
{
    int sizeValue,theNumber;
    cout<<"Enter the queue's size(less than 11): \n";
    cin>>sizeValue;
    Queue Q(sizeValue);
    while (true)
    {
                Q.display();
        cout<<"Please input a number to fill up the queue: \n";
        cin>>theNumber;
                Q.display();
        if (Q.enqueue(theNumber)==false)
            break;
    }
    cout<<"Now the queue have "<<Q.getSize()<<" elements,they are:\n";
    Q.display();
    cout<<"The first element in the queue is: "<<Q.dequeue()<<endl;
    cout<<"Now the queue have "<<Q.getSize()<<" elements,they are:\n";
    Q.display();
    return 0;
}
Queue::Queue(int theSize)
{
    int aQueue[10]={0,0,0,0,0,0,0,0,0,0};
    for (int i=0;i<10;i++)
         theQueue[i]=aQueue[i];
    size=theSize;
    sequence=0;//初始入列元素的位置为0。
}
bool Queue::enqueue(int number)
{
    theQueue[sequence]=number;
    sequence=sequence+1;//入列元素位置后移一位。
    if (sequence>=size)
    {
        cout<<"The queue is full!\n";
        return false;
    }
    else
        return true;
}
int Queue::dequeue()
{
    int firstNumber;
    firstNumber=theQueue[0];
    for (int i= 1;i<size;i++)
         theQueue[i-1]=theQueue[i];
    size=size-1;
    return firstNumber;
}
int Queue::peek(int number) const
{
    return theQueue[number];
}
int Queue::getSize() const
{
    return size;
}
void Queue::display() const
{
    for (int j=0;j<size;j++)
         cout<<theQueue[j]<<" ";
    cout<<endl;
}


  • 写回答

2条回答 默认 最新

  • cs_assassin 2018-04-24 13:30
    关注

    图片说明
    感觉这个输出没问题啊,输入数字,执行第二个 Q.display();这时输入值还没有入队列,再执行Q.enqueue(theNumber)入列操作,然后执行while循环中的第一个 Q.display();输出入列以后的队列值,这两次输出一个是入列前,一个是入列后,显示的结果当然不一样

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器