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

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();输出入列以后的队列值,这两次输出一个是入列前,一个是入列后,显示的结果当然不一样

    打赏 评论
  • adcasdcasdcas 2018-04-24 14:02

    运行结果

    打赏 评论

相关推荐 更多相似问题