开发者社区> 问答> 正文

codeblocks中while无限循环?

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

展开
收起
a123456678 2016-06-08 23:07:29 2831 0
1 条回答
写回答
取消 提交回答
  • 楼主把变量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没有被使用过,可能相关的编译器对其进行了优化,把没有使用过的变量没有保存到内存中,所以第一图的代码内存的状况跟第二图的代码是一样的。。。。

    2019-07-17 19:32:53
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载