c ++无符号无限循环比较错误

时间:2016-08-21 23:23:22

标签: c++ unsigned-integer

注意到我正在处理的其中一个程序中的错误,提取代码,基本上就是这个。
它与signed int进行无符号比较,并导致无限循环:

#include <iostream>  

int main()
{
    unsigned int i = 0;
    while (i < 1000000)
    {
        printf("%o\n", i);
        ++i;
    }
    return 0;
}

我尝试使用此代码:

#include <iostream>

int main()
{
    unsigned int i = 0;
    while (i < 1000000u)
    {
        printf("%o\n", i);
        ++i;
    }
    return 0;
}

我认为这会修复签名/未签名的比较,而且它还没有,它仍然会遇到无限循环。所以我也尝试将它转换为unsigned int,没有骰子,仍然是无限循环。

使用Visual Studio 2015,完全优化,发布编译器。

2 个答案:

答案 0 :(得分:3)

虽然我无法在Win7和Ubuntu(均为64位)上重现无限循环,但我相信问题是你的printf()函数有无符号八进制数表示,这会导致你认为它进入无限循环。将%o参数更改为%u可能会澄清问题。

答案 1 :(得分:1)

这是因为int类型溢出。请参阅类型limits。对于这么大的数字比较,您应该使用int代替paintthis gpane = new paintthis(array);