`do while (...) {...} while (...)` 结构解析:为何无报错且无输出?
为什么混合do-while与while的代码不报错且无输出?
先拆解你写的代码的语法结构,它本质是外层do-while循环嵌套内层while循环,完整结构等价于:
do // 内层while循环作为外层do-while的循环体 while (false) { Console.WriteLine(1); } while (true);
为什么不会报错?
C#语法规定,do-while循环的格式是do 语句 while(条件);,这里的“语句”可以是任意单个语句(包括另一个循环语句)。你的代码完全符合这个语法规则,因此编译器不会抛出错误。
实际执行逻辑
- 外层
do-while首先执行循环体:也就是内层的while(false)循环。由于while的条件是false,这个内层循环一次都不会执行,所以Console.WriteLine(1)永远不会被调用。 - 内层循环执行完毕后,外层
do-while会检查后续的while(true)条件,结果为true,因此会再次执行循环体(再次运行那个什么都不做的内层while循环)。 - 上述过程会无限重复,程序陷入“空转”的无限循环,既不会输出内容,也不会自行终止。
和常规do-while的区别
常规do-while的循环体是直接执行Console.WriteLine(1),每次循环都会执行输出操作,再检查while(true)条件,因此会无限打印1;而你的代码把输出逻辑放在了一个永远不会执行的内层while循环里,自然看不到输出。
内容的提问来源于stack exchange,提问作者user27743228
相关产品推荐
相关产品推荐

