2013-05-16 74 views
0

我使用特定的順序爲「for循環」由標準增量方向

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

但我經常迭代THROU字符串在C(炭[]),exspecially通過創建移位迴路用於LCD的顯示器我​​必須存儲第一個字符並在轉換後將其放在最後。

爲此我的問題是: 我可以更改順序,使類似的東西(我知道這是錯誤的代碼!):

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

正常風格的問題是,該條件「我< 10「將以9結束循環,但以下i ++使循環中的循環和循環之後的循環不同。

換句話說,我想在循環後面的「{...}」direkt中查看i的最後一個有效值。 當然,我知道,我可以再次遞減「我」。 我只是好奇,如果有一種方法讓for循環結束查詢。

非常感謝......

Greatings Oekel

+0

你能給的你正在嘗試做一個例子嗎?就像你想要'做些什麼'的命令'i'的列表一樣? –

回答

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; 
+0

**我總是忘了do {} while() - Loop ** 我認爲這是編寫我期望的最自然的方式。 在for() - 循環結束時關閉「break」的解決方案是我的2.選擇**但是**它需要額外的if(i == 9)-clausel來確保循環結束太早了。 – Oekel

1
for(int i=0; i<=SENTINEL_VALUE; i++) 
0

您可以使用關鍵字break退出循環不增加i

uint8_t i; 
for(i++;i=0; i<10;){ 
...do something... 
break; 
} 
uint8_t last_iterated_value = i; 
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 ... 
} 
1

你可以讓你的循環是這樣的:

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

,或者在循環後,使取i - 1last_iterated _value

0

我不知道我完全按照你的問題。但是,如果想法是捕獲在迭代中實際使用的值i,那麼您應該可以在循環內捕獲它。

在最簡單的情況下,可以將其設置在for循環的增量部分,像這樣:

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

然而,在的情況下,有從for環早點休息,只有你能決定是否在檢測到break條件時使用的值是否應該將i的值用作最後一次迭代值。

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

    } 
}