我在C语言中有一个For循环:
u8 i;
for (i=0; i <= 255; i++)
{
//code
}
现在编译器报错,提示“比较总是为真,因为数据类型的范围有限”。 我知道255是u8的最大值,但for循环必须有一个条件。那么我应该放什么条件呢? 谢谢。
uint8_t i=0;
do {
//code
}while(++i);
什么是u8
?如果它表示8位无符号整数,则255 + 1会再次变为零,因此循环重新开始。您应该使用更大的整数类型或者按照回复中建议的使用do-while
。
u8 i=0,iold;
do{
//code
iold=i++;
}while(iold<i);
do
-while
循环,实际上不需要 iold
,只需检查 i
是否变为零即可。 - Arkkuu8 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)
}
int
的返回值,否则如何区分它是在 i == 0
处中断还是循环从未被中断? - ouahu8
。 - dreamlaxfor
在这里永远不会结束。i<=255
和 i<256
之间有什么区别? - mangustai
不是256。 - mangustafor
循环会结束,int
保证能够容纳大于255的值。 - dreamlaxfor
循环不一定需要条件。如果您希望循环根本没有条件,可以编写以下代码:
for (i = 0; 1 ; i++)
或者
for (i = 0; ; i++)
但要注意,i
在达到255后会溢出,并每次从零重新开始。
如果您不希望它无限循环,则可以在循环内部放置一个 break;
,或者在 for
循环的条件字段中使用适当的条件。
说实话,我不确定为什么您的编译器会抱怨条件始终为真...
那我应该放什么?
使用一个更大的类型,比如int
类型。
i
,请展示整个函数。 - ouah