2013-05-14 154 views
-2

下面的代碼如何讓「i + = x」作爲「i ++」使用?

int i=0; 
while(i<10) { 
    printf("%d\n", i++); 
} 

相當於

int i=0; 
while(i<10) { 
    printf("%d\n", i); i++; 
} 

但下面的代碼

int i=0; 
while(i<10) { 
    printf("%d\n", i+=2); 
} 

相當於

int i=0; 
while(i<10) { 
    i+=2; printf("%d\n", i); 
} 

如何使其相當於

int i=0; 
while(i<10) { 
    printf("%d\n", i); i+=2; 
} 

一樣i++

+9

出於好奇,*爲什麼地球上*你會需要這樣的東西嗎? – 2013-05-14 08:35:20

+0

已經試過'++ i' – 2013-05-14 08:35:22

+1

@ C.Lang:你測試過了嗎?! – 2013-05-14 08:35:36

回答

4

好奇至於如何努力,我會命中暗示的明顯的東西爲:

for(int i = 0; i < 10; i += 2) { 
    printf("%d\n", i); 
} 
+0

爲此+1,顯然這就是答案 – 2013-05-14 08:55:55

+0

謝謝你的答案,這很簡單,它給了我一個靈感 – MOHAMED 2013-05-14 08:56:20

+4

@MOHAMED哇,不幸的是,它只是一個'for'循環你以後使得問題變得更加微不足道比我最初的想法。 – 2013-05-14 09:08:24

0

操作「++」有C/C++中的兩種含義和可能一些其他類似C語言
1.if「++」在變量前面
++i;因此我將首先加上一個和ca lculated值將是該語句的值 用於例如: int i=0;
int k;
k=++i;
//k=1 i=1

2.如果「++」是一個變量
i++;因此語句的值將是我的背後價值和我加一 爲例如: int i=0;
int k;
k=i++;
//k=0 i=1

+0

好吧,那又如何?是什麼讓你認爲OP還沒有意識到這一點(如果他沒有,他首先不會問這個問題)?真的沒有提供對實際問題的答案,是嗎? – 2013-05-14 08:54:17

+0

哦,我想解釋一下「1 ++」是如何工作的,實際上我沒有給出答案。對不起,關於 – 2013-05-14 09:02:47

1

也許你可以使用這個

1)

printf("%d",i++?(i++?i-2:(i-2)):(i++?i-2:0)); 

?引入序列點

有大約可讀性隻字不提。所以我不介意。

2)

printf("%d",(a++,a++,a-2)); 

,引入序列中的點。這裏的012.裏面的parantheses充當逗號操作符而不是參數分隔符。

+0

咦?這是否與'i + = 2'(返回遞增的值而不是先前的值*遞增)相同,這是OP不想要的? – 2013-05-14 08:49:48

+0

@ChristianRau現已編輯。 – 2013-05-14 09:03:29

+0

差不多,但現在它不適用於最初的'0'(在這種情況下它只會'i ++')。 – 2013-05-14 09:06:12

8

你也可以寫一個宏來做到這一點。就像這樣:

#define POSTINC(var, val) ((var) += (val), (var) - (val)) 

printf("%d\n", POSTINC(i,2)); 

但更好地利用兩種for或只是增加在接下來的語句中的值。

+0

謝謝你的答案是有趣的 – MOHAMED 2013-05-14 08:54:35

0
int i=2; 
while(i<10) { 
    printf("%d\n", i); i+=2; 
} 
相關問題