for循环条件始终为true

时间:2014-02-23 22:30:35

标签: c for-loop types range

我在C中有一个For循环:

u8 i;
for (i=0; i <= 255; i++)
{
    //code
}

现在编译器抱怨“由于数据类型的范围有限,比较总是如此” 我知道255是u8 max,但for循环必须有条件。那我应该放在那里? 感谢。

6 个答案:

答案 0 :(得分:7)

uint8_t i=0;
do {
    //code
}while(++i);

答案 1 :(得分:5)

什么是u8?如果它意味着8位无符号整数,则255 + 1再次给出零,因此循环重新开始。你应该使用更大的整数类型。或按照回复

中的建议使用do-while

答案 2 :(得分:3)

u8 i=0,iold;
do{
    //code
    iold=i++;
}while(iold<i);

答案 3 :(得分:3)

u8 someFunction()
{
    int i;
    for (i = 0; i < 256; i++)
    {
        // do something with i here and /or break
    }

    if (i == 256)
    {
        // loop ran completely without a break
    }

    return i; // will convert i to "u8" type (256 will become 0)
}

答案 4 :(得分:3)

for循环不一定需要条件。如果你想让循环完全没有任何条件,你可以写:

for (i = 0; 1 ; i++)

for (i = 0; ; i++)

但要注意i在达到255后会溢出,并且每次都从零开始。

如果你不希望它无限循环,那么要么在循环中的某个地方放置break;,要么在for循环的条件字段内使用适当的条件。

说实话,我不确定为什么你的编译器甚至抱怨条件总是如此......

答案 5 :(得分:2)

  

那我应该放在那里?

使用较大的类型,例如int类型。