0

按照我使用的标准

for(int i=0; i<10; i++)
{...do something...}

但是我经常遍历 C 中的字符串(char []),特别是通过为 lcd 显示器创建移位循环,我必须存储第一个字符并在移位后将其放在末尾。

因此我的问题是:我可以更改订单这样的东西(我知道这是错误的代码!!):

uint8_t i;
for(i++;i=0; i<10;)
{...do something...}
uint8_t last_iterated_value = i;

正常风格的问题是,条件“i<10”将以 9 终止循环,但随后的 i++ 使循环中的 i 和循环之后的 i 不同。

换句话说,我想在循环之后查看 "{...}" direkt 中 i 的最后一个有效值。当然我知道,我可以再次减少“i”。我只是好奇是否有办法让 for 循环以查询结束。

非常感谢...

格丁斯·欧克尔

4

7 回答 7

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;
于 2013-05-16T15:50:43.647 回答
1
for(int i=0; i<=SENTINEL_VALUE; i++)
于 2013-05-16T15:56:06.257 回答
1

您可以像这样制作循环:

for (int i = 0; i <= 9; i++)

或者,在循环之后,make take i - 1aslast_iterated _value

于 2013-05-16T15:57:26.673 回答
0

您可以使用关键字break退出循环而不增加i.

uint8_t i;
for(i++;i=0; i<10;){
...do something...
break;
}
uint8_t last_iterated_value = i;
于 2013-05-16T15:56:22.687 回答
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 ...
}
于 2013-05-16T15:56:54.503 回答
0

我不确定我是否完全遵循您的问题。但是,如果这个想法是捕获i实际在迭代中使用的值,那么您可能应该在循环本身中捕获它。

for在最简单的情况下,您可以在循环的增量部分中设置它,如下所示:

int last_iterated_value = -1;
for(int i=0; i<10; last_iterated_value = i++)
{...do something...}

但是,在for循环提前中断的情况下,只有您可以决定是否在break检测到条件时使用的值是否i应该用作最后一个迭代值。

于 2013-05-16T16:02:40.797 回答
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);

    }
}
于 2013-05-16T16:05:02.190 回答