2013-05-14 48 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; 
} 
相关问题