c - while 循环中的递增和递减

标签 c while-loop increment

这是我遇到问题的代码类型,只是一个例子:

 #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) : nTEN 进行比较,结果为真(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/

    相关文章:

    c - 如何在 while 循环内重置 do while 循环?

    php - 在 PHP 中从多个日期范围创建日期数组

    PHP:使用单词(即 First、Second、Third 等)递增计数器函数

    java - 如何在单击按钮时增加变量?

    c - 关于 POSIX 消息队列和无效参数

    从windows到linux的交叉编译源

    java - 如何使用 or ||... 比较字符串

    java - yield 增加后 : How are They Implemented?

    c - 从字符串 C 中的给定位置删除给定数量的字符

    c - Eclipse 还是 Netbeans?