gpt4 book ai didi

c - 一段代码使用do while循环的疑问

转载 作者:太空宇宙 更新时间:2023-11-04 01:15:13 24 4
gpt4 key购买 nike

这是下面显示的一小段代码,它使用了 do while 循环。我真的不明白我在执行这段代码时看到的意外行为。下面显示的这段代码使用了一个 do while 循环条件,据我所知,do while 循环的执行方式是先执行语句然后检查 while部分条件是否为真。但是当我执行这段代码时,它永远不会退出循环并永远继续下去。有人能告诉我为什么会这样吗?

           unsigned int A = 5;
int B = 0;
main()
{
do
{
A = A + 5;
B = B - 1;
}while(B > A);

printf("hello\n");
}

现在我从来没有打印过“hello”。

提前致谢麦迪

最佳答案

正如其他答案所说,比较有符号和无符号值是个坏主意(如果给出正确的标志,GCC 会发出警告)。您陷入“无限循环”的原因是有符号值 B 出于比较目的被视为无符号值。第一次到达while(B > A)时,B为-1(从0开始,递减一次)。当被视为无符号时,它成为可能的最大整数,因此比较为真。它在很长一段时间内都是正确的,因此循环似乎永远不会结束。最终递增 A 和递减 B 将导致它们相互传递并且循环将结束,但它会比您预期的花费更长的时间

关于c - 一段代码使用do while循环的疑问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3090451/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com