Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 带后期增量的while循环后的值_C_While Loop_Post Increment - Fatal编程技术网

C 带后期增量的while循环后的值

C 带后期增量的while循环后的值,c,while-loop,post-increment,C,While Loop,Post Increment,请解释为什么最后一个printf的值为11? 我真的不明白为什么会这样。 当a=10时,该条件未满足,为什么该值已更改为11? 检查条件后立即进行增量 代码: 让我们看看a++

请解释为什么最后一个printf的值为11? 我真的不明白为什么会这样。 当a=10时,该条件未满足,为什么该值已更改为11? 检查条件后立即进行增量

代码:
让我们看看
a++<10
何时
a
等于
10

首先会发生的事情是
10<10
将被计算(为false),然后
a
将增加到
11
。然后执行
printf
语句,该语句位于
循环之外

++
出现在变量的右侧时,它是行中最后计算的内容


尝试将
a++<10
更改为
++a<10
,重新运行代码并比较结果。

,因为它是增量后的。编译器将首先计算
apost increment运算符,在语句执行后,将变量的值增加到前面的值

举个例子,

int k = 5 ;
printf("%d\n", k++ );
printf("%d", k );
将输出

5
6
因为在第一个
printf()
中,会显示输出,只有在输出之后,值才会递增

那么,让我们看看您的代码

while(a++ < 10)
while(a++<10)
它检查
a<10
,然后增加
a

让我们在循环中进行几次迭代


a
9
时,while循环检查
9<10
,然后将
a
增加到10,因此该迭代的输出将为10,同样,对于下一次迭代,它将检查
10<10
,但while循环不执行,但是
a
的值会增加到
11
,因此,在下一个
printf()
中,您会得到
11

的输出。让我们看一段简单的代码来说明
a++
的作用

int a = 0;
int b = a++;

printf("%d %d\n", a, b);
我想您会期望它输出
11
。实际上,它将输出
10

这是因为
a++
所做的。它递增
a
的值,但表达式
a++
的值是
a
的初始预递增值

如果我们想在我的答案顶部以多个语句的形式编写初始代码,它实际上会被转换为:

int a = 0;
int b = a;
a = a + 1;

printf("%d %d\n", a, b);

我们可以访问的另一个增量是pre-increment。不同之处在于,表达式
++a
的值是
a
增加后的值。

为什么你认为
a
不应该在
a=10
时增加?你知道增量后是如何工作的吗?@BlueMoon我认为你的第二个问题的答案很明显,这反过来又回答了第一个问题。现在是的,谢谢大家的回答,我并不清楚,即使条件没有满足,这个值也会增加。@Misiek777本身,一般建议不要编写
while(a++<10)
这样的代码,因为它可能会让人困惑/不清楚,或者至少会让开发人员停顿一下。
int a = 0;
int b = a++;

printf("%d %d\n", a, b);
int a = 0;
int b = a;
a = a + 1;

printf("%d %d\n", a, b);