为什么C#中条件满足时while循环未执行所有符合分支?
参考流程图


问题分析
你代码的核心问题有三个:
- 控制输出
C的变量用错:你当前用arr[2](第三个输入值)控制输出C的循环次数,输入测试用例5 3 0时arr[2]为0,导致输出C的循环完全不执行。实际应该用第二个输入值arr[1]来控制C的输出次数。 - 条件判断逻辑错误:你判断
arr[2] < 0才输出D和G,但测试用例中arr[2]为0,不满足小于0的条件,导致后续字符完全不输出,应该把判断条件改为arr[2] <= 0。 - 冗余的嵌套
while逻辑:你在分支里写了很多仅执行一次就break的while循环,完全没有实际作用,反而干扰逻辑判断,直接用条件判断输出对应字符即可。
修改后代码
using System; namespace FlowChart { public class Program { public static void Main(string[] args) { string wprowadzoneLiczby = Console.ReadLine(); int[] arr = Array.ConvertAll(wprowadzoneLiczby.Split(' '), int.Parse); while (arr[0] > 0) { while (arr[1] > 0 && arr[0] > 0) { arr[0] -= 1; arr[1] -= 1; Console.Write("C"); } if (arr[2] <= 0) { Console.Write("D"); Console.Write("G"); } break; } while (arr[0] < 0) { Console.Write("E"); Console.Write("G"); Console.WriteLine(); break; } } } }
验证效果
输入5 3 0时,代码执行逻辑如下:
arr[0]=5>0进入外层循环- 内层循环执行3次,输出3个
C,此时arr[0]变为2,arr[1]变为0 - 判断
arr[2]=0<=0,依次输出D和G - 最终输出结果为
CCCDG,完全符合预期,且全程未使用for或goto语句。
内容的提问来源于stack exchange,提问作者Julia Kućmierczyk
相关产品推荐
相关产品推荐

