这是我遇到问题的代码类型,只是一个例子:
#include <stdio.h>
#define TEN 10
int main(void)
{
int n = 0;
while (n++ < TEN)
printf("%5d", n);
printf("\n");
return 0;
}
在这里,增量运算符首先在 while 循环内工作,并且 n 得到 1;然后它再次为 while 循环运行 printf() 语句,所以现在 n 得到 2 并且第一次执行 printf() 语句时打印“1”?因为否则,将打印“0”。我不确定它是否以这种方式工作,所以你能解释一下吗,就像我说的对吗?
PS:我没有老师,所以我问你们……
最佳答案
这里的技巧是 ++
后缀运算符:它被称为后增量。表达式中使用的值如果 n
之前的值 增量和 n
在下一个序列点之前的某个点更新,要么是表达式的结尾,要么是函数调用,要么是逗号运算符,您不太可能使用高级运算符很快就需要。
另一个警告是 C 中 bool 值的特殊处理:如果 n < 10
为真,则对 1
求值,否则对 0
求值。相反,没有比较的测试(例如 if (n)
对任何非零、非空和非 NaN 值都成功。
以下是事件的顺序:
int n = 0
定义了一个 n
类型的局部变量 int
并将其初始化为值 0
。 while (n++ < TEN)
: n
与 TEN
进行比较,结果为真(C 中的 1
),因为 0 < 10
然后 n
递增并得到值。比较结果为真,因此 1
循环继续执行其命令语句。 while
打印 printf("%5d", n);
的值,即 n
。 1
: while (n++ < TEN)
再次与 n
进行比较,结果仍然是 TEN
因为 1
然后 1 < 10
递增并得到 n
的值比较结果为真,因此 2
循环继续执行其命令语句。 while
打印 printf("%5d", n);
的值,即 n
。请注意,此输出与前一个输出或下一个输出之间没有分隔符。 2
9
: while (n++ < TEN)
与 n
比较,结果是 TEN
因为 1
然后 9 < 10
递增并得到值 n
。比较的结果仍然为真,因为比较是在增量之前执行的,因此 10
循环继续执行其命令语句。 while
打印 printf("%5d", n);
的值,即 n
。 10
: while (n++ < TEN)
与 n
比较,结果为假(C 中的 TEN
),因为 0
< 10 101 is not
n **then**
11 is incremented and gets the value
while` 循环停止并控制跳到下一个语句。 . The result of the comparison is false hence the
打印换行符,结束输出行 printf("\n");
12345678910
return 0;
函数返回 main
退出状态,这意味着成功。 关于c - while 循环中的递增和递减,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50065716/