kevinoop
kevinoop
2015-12-22 02:30
采纳率: 75%
浏览 1.9k
已采纳

c循环问题,求大神教教

while(n=1/3)会陷入无限循环吗?
for(;2;)呢?
什么原理,求大神教

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

12条回答 默认 最新

  • sinat_28690417
    架构探险之道 2015-12-22 03:23
    已采纳

    说到这里,你应该已经发现两个循环语句都是同一个问题,那就是是否会无限执行下去。没有循环体,不执行,是我的判断,建议你亲自执行一下代码。
    我在编写其他代码时遇到过,循环判断后,默认把紧接循环判断后的一行语句作为循环体无限执行的情况,你可以测试一下
    一种情况是程序只有循环语句前面,另一种情况是程序测试代码在循环后面

    点赞 评论
  • qq_31325033
    月苍 2015-12-22 02:41

    用插入代码片贴代码,不然有些是显示不出来的

    点赞 评论
  • u012216727
    大河行脚 2015-12-22 02:42

    while里面是判断的,所以应该用==而不是赋值语句;你n是什么类型的,如果没有赋初始值的话,它对应类型就会有一个默认值,这个默认值会与1/3比较的。
    但是不会陷入无限循环的。
    而for(;2;)第一次执行的时候,它会执行第一个分号前面的条件,由于没有则执行方法体中的程序;执行完后它会执行第二个分号后面的条件,由于没有条件,然后去
    两个分号中间的进行判断,由于你这里也相当于没有条件,所以可以说你for的方法体里面是永远无条件的执行下去的,也就是无限循环;

    点赞 评论
  • u012216727
    大河行脚 2015-12-22 02:43

    你可以自己写一下运行试试看看。

    点赞 评论
  • qq_25897483
    Paindar 2015-12-22 02:48

    n=1/3结果是n=0(0.3333)的小数点被截断掉了,而0->false所以不循环

    for(0;2;0)中 判断表达式为2 非0 所以会一直循环。

    点赞 评论
  • Royal_lr
    Royal_lr 2015-12-22 03:04

    主要是看条件是否为true,,如果为true的话就一直循环

    点赞 评论
  • sinat_28690417
    架构探险之道 2015-12-22 03:10

    的确,你的while 括号内只要不是false,就会执行下方的循环体中的内容。再者,while 中的判断相等应该使用==。

    点赞 评论
  • sinat_28690417
    架构探险之道 2015-12-22 03:15

    但你的while 只有循环判断语句,没有需要执行的循环体,如果你的while 语句后有{}循环体,就会无限循环下去,没有循环体,只有循环判断语句,我觉得是不会无线执行的。
    然后就是你的for 判断,后面的括号里分成三个部分,第一个为给定初值;第二个为循环判断条件,里面的同理只要不是false

    点赞 评论
  • sinat_28690417
    架构探险之道 2015-12-22 03:20

    其他内容(包括2)都是被认为是true,接着执行下一次循环;第三部分一般是循环变量的自增和自减,也可以写其他代码,并不影响循环,但务必为执行代码或是空,不能为一数值或是true 和false

    点赞 评论
  • sinat_28690417
    架构探险之道 2015-12-22 03:24

    最后,总结一下就是,如果你的循环语句后有循环体的话,是一定会无限执行下去的,因为你两个判断的结果都是true

    点赞 评论
  • John_ToString
    John_ToString 2015-12-22 04:27


    #if 1
    #include
    using namespace std;

    int main()
    {
    int n;
    while (n = 1/3)
    {

    }
    cout << "ads" << endl;
    return 0;
    

    }
    #endif


    #if 1
    #include
    using namespace std;

    int main()
    {
    //int n;
    for (; 2; )
    {

    }
    cout << "ads" << endl;
    return 0;
    

    }
    #endif

    以下是我的测试代码,亲测死循环,没有任何问题...

    点赞 评论
  • qq_32653701
    Svvvvvm 2015-12-22 16:43

    while(n=1/3)
    整除的话n=0吧
    while(0)就不做啊…如果n=2或者其他正数 就做
    如果是判断语句如:n!=0什么的就循环 满足条件就跳出

    点赞 评论

相关推荐