“for-Loop”增量的特定顺序

时间:2013-05-16 15:47:40

标签: c for-loop iteration external

按标准我用

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

7 个答案:

答案 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);

    }
}