adcasdcasdcas
adcasdcasdcas
2018-04-24 13:06

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

40
  • c++

使用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条回答