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;
}


c++

2个回答

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

adcasdcasdcas
adcasdcasdcas 回复cs_assassin: 可以编译通过,但运行起来会有问题
一年多之前 回复
adcasdcasdcas
adcasdcasdcas 回复cs_assassin: 贴在下面了
一年多之前 回复
cs_assassin
cs_assassin 回复adcasdcasdcas: 你可以把输出结果截图出来看看吗,我这里看你唯一问题是theQueue[]在声明时没有声明数组大小,这个在VS是编译无法通过的,不知道CB里是怎么处理这个数组
一年多之前 回复
adcasdcasdcas
adcasdcasdcas 回复cs_assassin: 我找到原因了,好像是因为我前面没有对theQueue初始化,谢了
一年多之前 回复
cs_assassin
cs_assassin 回复adcasdcasdcas: 用的Visual Studio,Win10
一年多之前 回复
adcasdcasdcas
adcasdcasdcas 回复adcasdcasdcas: 因为我这里输入theNumber前后打印出来的数组值不一样。。
一年多之前 回复
adcasdcasdcas
adcasdcasdcas 你好,用的是CodeBlocks吗,操作系统是哪个呀
一年多之前 回复

运行结果

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C++程序中值突然改变的问题,CodeBlocks 17.12,win10
使用CodeBlocks 17.12版本,win10系统。nn下面main函数中的while循环内部的两个Q.display()输出的内容不同,期间只是cin了一个数,不知道是什么原因。(Q.display()输出的是theQueue的前size个数值)nn还有enqueue函数中的sequence的值也会莫名其妙的改变,不懂。。nn求教~n```n#include nnusing namespace std;nclass Queuennpublic:n Queue(int theSize);n bool enqueue(int number);n int dequeue();n int peek(int number) const;n int getSize() const;n void display() const;nprivate:n int size;n int theQueue[];n int sequence;//记录当前入列的元素位置。n;nint main()nn int sizeValue,theNumber;n cout<<"Enter the queue's size(less than 11): \n";n cin>>sizeValue;n Queue Q(sizeValue);n while (true)n n Q.display();n cout<<"Please input a number to fill up the queue: \n";n cin>>theNumber;n Q.display();n if (Q.enqueue(theNumber)==false)n break;n n cout<<"Now the queue have "<=size)n n cout<<"The queue is full!\n";n return false;n n elsen return true;nnint Queue::dequeue()nn int firstNumber;n firstNumber=theQueue[0];n for (int i= 1;i
CodeBlocks 17.12 & 编译器.rar
如果运行CodeBlocks C/C++项目时,出现 “Code::Blocks cannot find/run the compiler.”则说明需要C/C++编译器。
codeblocks 17.12汉化包
CodeBlocks汉化包设置使用方法 1、先安装codeblock17.12,安装成功后,先不打开软件,打开的话进行关闭。 codeblock17.12官方版点击下载 2、找到CodeBlock/share/CodeBlocks/,将下载的压缩包解压后,把文件夹locale整个复制到安装codeblock的安装目录下的share\CodeBlocks\目录中。 3、如果打开没用就,点击软件右上角的Settings菜单,点击Evironment, 右边第二排打上勾,然后再右侧的地方改成Chinese(Simplified); 4、然后重启即可完成汉化操作。
CODEBLOCKS 17.12汉化包
CODEBLOCKS 是我个人很喜欢的一个IDE,它轻巧,强大,跨平台,而且新版本更新加入了对Qt5的支持!以上是CODEBLOCKS 17.12汉化包
codeblocks 17.12 汉化包
codeblocks 17.12 汉化包,该汉化包网上发布时间最早在2018/2/17,资源来源于网上,本人亲自自用OK,现分享出来
CodeBlocks 17.12 汉化补丁-v5.2.6
该汉化包网上发布时间最早在2018/2/17。 本人亲自手动汉化的 Code::Blocks 17.12 正式版汉化包。 1.延续了上一版本16.01汉化包,所以本汉化包同样能使用在16.01版本上。 2.该汉化包将编译器配置的汉化单独抽取出来汉化,避免上一版本汉化包汉化后不能修改编译器配置项的问题。 3.修复没法打开wxs资源文件的bug 4.汉化了项目文件向导,更容易按照向导的提示创建项目 欢迎使用 Code::Blocks 17.12! Code::Blocks 是一款功能强大的IDE(集成开发环境), 力求为开发者(个人或团队)提供一个能满足各种需求的优秀编程环境。 开发者可以利用它的插件架构编写插件,从而添加各种各样的功能。 汉化:疯狂的诅咒&lt;846131012@qq.com&gt; 协助:火箭动员兵, 一笑奈何 版本:Code::Blocks 17.12-v5.2.6 汉化版 汉化方法: 1.关闭Code::Blocks 2.将share文件夹覆盖到Code::Blocks根目录下 3.打开Code::Blocks 4.依次点击Settings --&amp;g
CodeBlocks 17.12 汉化补丁-v5.2.6-疯狂的诅咒
该汉化包网上发布时间最早在2018/2/17。 本人亲自手动汉化的 Code::Blocks 17.12 正式版汉化包。 1.延续了上一版本16.01汉化包,所以本汉化包同样能使用在16.01版本上。 2.该汉化包将编译器配置的汉化单独抽取出来汉化,避免上一版本汉化包汉化后不能修改编译器配置项的问题。 3.修复没法打开wxs资源文件的bug 4.汉化了项目文件向导,更容易按照向导的提示创建项目 欢迎使用 Code::Blocks 17.12! Code::Blocks 是一款功能强大的IDE(集成开发环境), 力求为开发者(个人或团队)提供一个能满足各种需求的优秀编程环境。 开发者可以利用它的插件架构编写插件,从而添加各种各样的功能。 汉化:疯狂的诅咒&lt;846131012@qq.com&gt; 协助:火箭动员兵, 一笑奈何 版本:Code::Blocks 17.12-v5.2.6 汉化版 汉化方法: 1.关闭Code::Blocks 2.将share文件夹覆盖到Code::Blocks根目录下 3.打开Code::Blocks 4.依次点击Settings --&amp;g
CodeBlocks 17.12版本安装包及汉化方法
该资源是开源软件C/C++集成开发环境CodeBlocks17.12版本的安装及汉化方法,资源包含有:codeblocks-17.12mingw-setup.exe安装包,汉化补丁文件以及汉化的方法说明。下载压缩包后,直接解压到当前文件夹下即可。
CodeBlocks(17.12) 代码调试基础方法&快捷方式
1       printf输出代码关键字查找bug        这个是最简单最容易想到的方法,一般初期开始接触c语言,并用其从事简单代码编辑的时候都会很容易就习惯上这种调试方法,对一些特殊情况的实用率可能是最高的(比如结构难以想象的复杂数据结构之类的)2       用软件自带的Split view来查看  在CodeBlocks的编辑界面右键找到Split view,Horizontally...
LINUX codeblocks突然打不开
我在linux虚拟机中使用codeblocks,中午的时候还是好好的用着的,晚上回来就莫名其妙打不开了,点击后一下就闪过了,然后就没了,我完全不知道是怎么回事啊rn还有,我对linux的终端命令不怎么清楚,完全菜鸟rn急求帮助rnHELP
Codeblocks在win10运行问题
点击bulid and run 没反应,是编辑器和路径的问题吗?求大神指点。
c中值传递问题
有点郁闷,想不通,发帖寻解释rn大家知道,c里面是值传递,因此rn[code=C/C++]rnint main()rn void exchang(int a,int b)rn int w=0;rn w=a;a=b;b=w;rn rn int x=1,y=2;rn exchang(x,y);rn printf("x=%d,y=%d",x,y);rn rnrn[/code]rn这个程序并不能交换x和y的值,因为在exchang内部参数是值传递的,实际改变的是exhcang内的临时变量rn再看这个rn[code=C/C++]rnint main()rn void test(int m)rn m=12;rn rn int a=1;rn test(a);rn printf("a=%d",a);rnrnrn[/code]rn因为是值传递,m是a的一个拷贝,函数改变的是m的值,而不是a的值,所以a应该还是1,但输出却是12;不明白啊rn还有,如果用宏的话rn[code=C/C++]rn#define testx(m,n) int a=0;(a)=(m);(m)=(n);(n)=(a);rnint main()rn int x=1,y=2;rn testx(x,y);rn printf("x=%d,y=%d",x,y);rnrnrn[/code]rn确能交换x和y的值,不明白 求解释
【富文本】CodeBlocks最新版17.12下载,CodeBlocks无法编译的原因和解决办法,Codeblocks汉化包下载及使用教程
1. 本文已迁移至 博客园https://www.cnblogs.com/coco56/p/11161299.html 简书https://www.jianshu.com/p/e88ab2e32e73 CSDNhttps://blog.csdn.net/COCO56/article/details/95228780 2. 按 本文主要分享了以下内容: CodeBlocks最新版17.12云...
求教:int型在程序中值突然超长的问题
在一个调用oracle存储过程的.pc程序中(后缀为.pc,实际上是用c++写的)rn有定义EXEC SQL BEGIN DECLARE SECTION;rn ......................rn int RetCode=-99; /* 存储过程返回码 */rn .......................rn EXEC SQL END DECLARE SECTION; rn******************************************rn值的插入为: EXEC SQL EXECUTErn BEGINrn test.telecom.pay(rn ......................rn :RetCode,//存储过程返回码rn ......................rn END;rn END-EXEC;rn******************************************rn在用一个测试程序运行时(接收包信息为"0202000020031009165428V008888800371005210020031009165428300007353270032 888888 0000000200002003100916542812345678 1000") 此时结果无误 RetCode返回值0 显示000rnrn但是(接收包信息为"0202000020031009165428V008888800371005210020031009165428300007352239696 888888 0000000200002003100916542812345678 1000") 此时显示RetCode返回值比正常的多出4位 RetCode为2,显示为0021308rnrn请问各位高高手,造成此错误的原因是什么?要怎么避免? 解决问题后马上结贴
相关热词 c#检测非法字符 c#双屏截图 c#中怎么关闭线程 c# 显示服务器上的图片 api嵌入窗口 c# c# 控制网页 c# encrypt c#微信网页版登录 c# login 居中 c# 考试软件