首页 > 解决方案 > 我不明白 while 循环中发生了什么。你能解释一下吗?

问题描述

#include <stdio.h>

int main() {
    int i = 10;
    while (i++ != 0);
    printf("%d", i);
}

输出:1

我不明白while循环。

标签: cwhile-loop

解决方案


i递增直到int变量饱和(当 int 为 16 位长时为 32767),然后开始从 -32.768 向上计数到零。当i变为零时,while 循环停止。由于 post increment i++i将在 while 循环完成时为一。因此,您会得到一个打印到输出的结果。

编辑:长解释: 第一次执行while条件时,会检查10是否不等于0。这次检查后,i递增到11,下一次检查11不等于0,i变成12。这样继续直到达到 的最高可能值int。当这个最大值增加时,您会得到可能的最低值,但这也不等于零。所以条件仍然成立,但现在你有一个负数,并且负数递增将变为零。因此,一段时间后,i变为 0 并且 while 条件为假,并且由于i在此检查后递增,您将得到输出 1。


推荐阅读