为什么z变量的输出是19?该代码如何更清晰地工作?

0 c++ while-loop do-while

我有以下 C++ 程序;

#include <iostream>

int main() {
    int i=1, j=1, k=1, z=0;
    for (; i <= 10; i++)
        while(j <= 10) {
            j++;
            do {
                k++;
                z++;
            } while(k <= 10);
        }
    std::cout << z << " ";
}
Run Code Online (Sandbox Code Playgroud)

运行时输出为 19,我无法理解为什么会这样。

由于之前的 while(j<=10),我预计返回值为 10。我错过了什么?

Vla*_*cow 5

do while 循环是 while 循环的子语句

while(j<=10) {
    j++;
    do {
        k++;
        z++;
  } while(k<=10);
Run Code Online (Sandbox Code Playgroud)

由于while循环的条件而执行了10次

while(j<=10) {
Run Code Online (Sandbox Code Playgroud)

在内部 do-while 循环内的第一次循环迭代中,变量z变为等于10。另一方面,由于 do-while 循环的条件,该变量k将等于11

    do {
        k++;
        z++;
  } while(k<=10);
Run Code Online (Sandbox Code Playgroud)

在外部 while 循环的下一次9迭代中,内部 do while 循环将仅迭代一次,因为在 while 循环的第一次迭代之后,变量k将大于10

因此,在 while 循环的第一次迭代之后,变量z将等于10,并且在 while 循环的下一次9迭代中,变量z每次只会增加一次。

也就是说,do-while 循环始终至少有一次迭代,因为在执行其子语句后会检查其条件。