首页 > 入门:codeblocks中while无限循环?

入门:codeblocks中while无限循环?

本小白刚入门…


在codeblocks中用GCC编译后运行无限循环,加入输出i的值以后发现i自动变小?然后如果把i++移入变成num[i++]又能成功。。
换成C-Free4.0中编译运行,就不会无限循环了…
这是为啥?跪求帮助啊,ಥ_ಥ谢谢谢谢
(ง •̀_•́)ง


先分析第二图的代码吧

楼主把变量i定义在num1数组后面,num1数组有5个元素。

对应的内存情况应该是:num1[0] num1[1] num1[2] num1[3] num1[4] i

而且楼主的scanf函数放在判断i < SIZE之前,楼主每次输入的都是1。

所以前5次输入会把num1[0..4]都输入为1,第六次还没做i < SIZE判断,就执行了一次scanf,且输入的地址是&num1[5],刚好 &num1[5] == &i,所以你就把1输入到了i中,然后再进行i < SIZE的判断,必定会为真的。

请楼主把i < SIZE的判断放到scanf函数前面先做判断就可以了

对于第一图代码,为什么出现了num2和num3数组在变量i和数组num1之间,依然会产生这个效果,因为注意到楼主代码num2和num3没有被使用过,可能相关的编译器对其进行了优化,把没有使用过的变量没有保存到内存中,所以第一图的代码内存的状况跟第二图的代码是一样的。。。。


先把一个前提说下:没有人会这么给数组循环赋值,你应该去找找正确且一般的方法,否则对你来说这个问题毫无意义。

如果你真的是想把这个搞懂,你得好好看看 &&这些逻辑运算符的知识,c++的内存知识等等

想当初初学C还不知道编译器是什么gui呢,先按照c11来吧


i == 5的时候 数组越界了

把i < SIZE 与 scanf调换位置

还有就是codeblocks和cfree是IDE!
编译器都是gcc在win下的移植版

【热门文章】
【热门文章】