按标准我用
for(int i=0; i<10; i++)
{...do something...}
但我经常在C(char [])中使用字符串迭代,特别是通过为lcd-displays创建移位循环,我必须存储第一个字符并在移位后将其放在最后。
因此我的问题是: 我可以更改顺序吗(我知道这是错误的CODE !!):
uint8_t i;
for(i++;i=0; i<10;)
{...do something...}
uint8_t last_iterated_value = i;
正常风格的问题是,条件“i&lt; 10”将以9结束循环,但是下面的i ++使i在循环中和循环之后不同。
换句话说,我希望在循环后的“{...}”direkt中看到i的最后一个有效值。 当然,我知道,我可以再次减少“我”。 我很好奇是否有办法让for-loop以查询结束。
非常感谢...
Greatings Oekel
答案 0 :(得分:1)
以下内容有效
uint8_t last_iterated_value = i-1;
您也可以使用
int i=0;
do {
...do something...
} while(i<10);
uint8_t last_iterated_value = i;
或者
int i=-1;
while(++i<10) {
...do something...
}
uint8_t last_iterated_value = i;
答案 1 :(得分:1)
for(int i=0; i<=SENTINEL_VALUE; i++)
答案 2 :(得分:1)
你可以这样做你的循环:
for (int i = 0; i <= 9; i++)
或者,在循环之后,将i - 1
作为last_iterated _value
答案 3 :(得分:0)
您可以使用关键字break
退出循环而不增加i
。
uint8_t i;
for(i++;i=0; i<10;){
...do something...
break;
}
uint8_t last_iterated_value = i;
答案 4 :(得分:0)
不,你不能改变for语句中项目的顺序,并期望它们做同样的事情。我想你想要的是:
int last_i;
for (int i=0; i<10; i++)
{
....do stuff ...
last_i = i; //put this inside the loop instead of after
}
甚至这个:
int last_i;
for (int i=0; i<10; i++, last_i = i-1)
{
....do stuff ...
}
答案 5 :(得分:0)
我不确定我是否完全听从你的问题。但是,如果想要捕获迭代中实际使用的i
的值,那么您应该在循环内捕获它。
在最简单的情况下,你可以在for
循环的增量部分设置它,如下所示:
int last_iterated_value = -1;
for(int i=0; i<10; last_iterated_value = i++)
{...do something...}
但是,如果for
循环中存在早期中断,则只有您可以确定在检测到break
条件时使用的值是否为{{{ 1}}应该用作最后一个迭代值。
答案 6 :(得分:0)
请在main()
上拨打此电话,看看我是否理解您的问题
void *workin(){
int i=0,count=10;
char v[]={' ',' ','>','>','>',' ',' ',' ',' ',' '};
printf("\n");
for(;;){
for(i=count-1;i>=0;i--){
v[(i+1)%(count)]=v[i];
}
fflush(stdout);
printf("processing %s \r",v);
sleep(1);
}
}