C ++ while循环即使条件变为假也不会终止

穆迪·索尼

我写了一个堆建立函数,可以在数组中建立最大堆。它从最后一个节点开始,并检查每个向上移动的节点。当前它在节点“ a”上,它检查左子节点和右子节点,如果它们存在并且值大于“ a”,则“ a”与最大的直接子节点交换,并一直持续到子树被堆积为止。我在细流向下部分使用了while循环。一直进行下去,直到任何子节点的值大于当前节点的值为止,或者至少应该如此。当我在这种情况下使用while循环时,循环永远不会终止。但是,如果我在while循环中放入具有相同条件的break if语句,则它会起作用。怎么了?

void buildHeap(int arr[], int n)  { 
    int m= n;
    
    while(m){
        int i= m;
        int l= (2*i<=n)?arr[2*i-1]:INT_MIN;
        int r= (2*i+1<=n)?arr[2*i]:INT_MIN;
      
        cout<<l<<" "<<r<<endl;
        while(arr[i-1]<l || arr[i-1]<r){     //  <--- This doesn't work
            cout<<i<<endl;
            if(l>r){
                arr[2*i-1]= arr[i-1];
                arr[i-1]= l;
                i= 2*i;
            }
            else{
                arr[2*i]= arr[i-1];
                arr[i-1]= r;
                i= 2*i+1;
            }
            
            int l= (2*i<=n)?arr[2*i-1]:INT_MIN;
            int r= (2*i+1<=n)?arr[2*i]:INT_MIN;
            cout<<(arr[i-1]<l || arr[i-1]<r)<<endl;
            //if(!(arr[i-1]<l || arr[i-1]<r)) break;     <--- This works
        }
        
        m--;
    }
    
    for(int i=0; i<n; i++)
        cout<<arr[i]<<" ";
    cout<<endl;
    
    return;
}

我使用了数组{1,2,3}的简单示例。以下是输出。

-2147483648 -2147483648       <--- l and r for node 3
-2147483648 -2147483648       <--- l and r for node 2
2 3                           <--- l and r for node 1
1                             <--- while loop starts here, i= 1
0                             <--- The value of while loop condition is 0. Still it doesn't terminate.
3                             <--- i= 3
0                             <--- Loop condition still false.
7
0
15
0
31
0
63
0
127
0
255
Segmentation fault (core dumped)
伊戈尔·坦德尼克(Igor Tandetnik)

在循环内部,您有

int l= (2*i<=n)?arr[2*i-1]:INT_MIN;
int r= (2*i+1<=n)?arr[2*i]:INT_MIN;

这将声明并初始化新变量lr,它们位于循环体的本地,并且与在循环外部声明的具有相同名称的变量不同且无关。这些“外部”变量保持不变。

break语句注释的行检查“内部”变量,但是循环条件检查“外部”变量。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

满足条件时,while循环不会终止(C ++)

来自分类Dev

Ctrl + C命令不会终止无限(while)循环

来自分类Dev

在 while 部分变为 false C# 后,Do-while 循环不会停止

来自分类Dev

While / For循环不会循环。(C ++)

来自分类Dev

While循环意外终止(C / C ++)

来自分类Dev

带循环的程序不会以CTRL + C终止

来自分类Dev

While循环,即使条件为假也要进行额外循环

来自分类Dev

终止while(cin >> s)循环。加速的C ++

来自分类Dev

C - while 循环不会退出

来自分类Dev

为什么此循环不会终止?(C语言)

来自分类Dev

目标C做while循环不会在错误条件下退出

来自分类Dev

中断运算符会将while循环条件从“真”变为“假”吗?

来自分类Dev

类中的while循环不会执行c ++

来自分类Dev

do ... while 循环不会破坏 C++

来自分类Dev

C ++ While循环即使在正确答案下也可以无限循环

来自分类Dev

C中的While循环,未执行条件

来自分类Dev

在正常运行之前,我在C中的开关(在while循环内)直接变为默认值

来自分类Dev

浮点最大化循环不会在D中终止,可以在C ++中使用

来自分类Dev

C ++:虽然循环不会以NULL终止,但是我缺少什么吗?

来自分类Dev

输入后,C while循环不会停止运行

来自分类Dev

我的while循环不会在C程序中重复

来自分类Dev

Python While循环查找素数不会终止

来自分类Dev

C编程:Scanf in while循环仅读取一次输入,然后终止

来自分类Dev

满足条件后终止while循环(R)

来自分类Dev

在C#中使用多个条件的while循环

来自分类Dev

带2个条件的while循环不起作用c ++

来自分类Dev

做-在C中有多个条件的while循环

来自分类Dev

C 上的无限 do-while 循环(2 个条件)

来自分类Dev

C指针在循环中变为NULL

Related 相关文章

  1. 1

    满足条件时,while循环不会终止(C ++)

  2. 2

    Ctrl + C命令不会终止无限(while)循环

  3. 3

    在 while 部分变为 false C# 后,Do-while 循环不会停止

  4. 4

    While / For循环不会循环。(C ++)

  5. 5

    While循环意外终止(C / C ++)

  6. 6

    带循环的程序不会以CTRL + C终止

  7. 7

    While循环,即使条件为假也要进行额外循环

  8. 8

    终止while(cin >> s)循环。加速的C ++

  9. 9

    C - while 循环不会退出

  10. 10

    为什么此循环不会终止?(C语言)

  11. 11

    目标C做while循环不会在错误条件下退出

  12. 12

    中断运算符会将while循环条件从“真”变为“假”吗?

  13. 13

    类中的while循环不会执行c ++

  14. 14

    do ... while 循环不会破坏 C++

  15. 15

    C ++ While循环即使在正确答案下也可以无限循环

  16. 16

    C中的While循环,未执行条件

  17. 17

    在正常运行之前,我在C中的开关(在while循环内)直接变为默认值

  18. 18

    浮点最大化循环不会在D中终止,可以在C ++中使用

  19. 19

    C ++:虽然循环不会以NULL终止,但是我缺少什么吗?

  20. 20

    输入后,C while循环不会停止运行

  21. 21

    我的while循环不会在C程序中重复

  22. 22

    Python While循环查找素数不会终止

  23. 23

    C编程:Scanf in while循环仅读取一次输入,然后终止

  24. 24

    满足条件后终止while循环(R)

  25. 25

    在C#中使用多个条件的while循环

  26. 26

    带2个条件的while循环不起作用c ++

  27. 27

    做-在C中有多个条件的while循环

  28. 28

    C 上的无限 do-while 循环(2 个条件)

  29. 29

    C指针在循环中变为NULL

热门标签

归档