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 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同