C# While循环中布尔值控制扫描逻辑失效问题求助
修复C# AntivirusScan程序的逻辑错误
我帮你排查了代码里的几个关键逻辑问题,这些问题直接导致了输出和预期不符:
问题分析
- 独立if语句引发多分支误触发:你的代码里所有条件都是独立的
if判断,而非互斥的else if。比如当hideMode为true时输入scan,程序会先执行scan的扫描计数逻辑,再执行hideMode == true的提示,这就出现了不该有的扫描输出。 - unhide操作错误触发扫描:输入
unhide时,你的代码直接执行了扫描计数和输出,但预期是unhide仅恢复扫描权限,下次输入scan才开始扫描。 - 重复的提示输出:输入
hide时你既输出了提示又设置了hideMode,之后每次循环只要hideMode为true都会重复输出提示,造成冗余内容。
修复后的代码
class AntivirusScan { static void Main(string[] args) { int fileIndex = 0; bool hideMode = false; bool heDoesntKnow = true; while (heDoesntKnow) { string answer = Console.ReadLine(); if (answer == "game over") { Console.WriteLine($"run"); heDoesntKnow = false; } else if (hideMode) { // 隐藏模式下,仅处理unhide和非法操作提示 if (answer == "unhide") { hideMode = false; } else { Console.WriteLine($"can't scan files for viruses"); } } else { // 非隐藏模式下处理scan和hide if (answer == "scan") { fileIndex++; Console.WriteLine($"scanning file {fileIndex}"); } else if (answer == "hide") { Console.WriteLine($"can't scan files for viruses"); hideMode = true; } } } } }
验证预期输出
当输入序列scan scan hide scan scan unhide scan game over时,输出会和预期完全一致:
scanning file 1 scanning file 2 can't scan files for viruses can't scan files for viruses scanning file 3 run
核心改进点:
- 用嵌套条件区分隐藏模式和非隐藏模式,保证同一时间只有一个逻辑分支执行
- 隐藏模式下,只有
unhide能切换状态,其他操作(包括scan)都只输出提示,不执行扫描 unhide操作仅切换状态,不触发扫描,符合预期逻辑- 移除了重复的提示输出逻辑,避免冗余内容
内容的提问来源于stack exchange,提问作者Lisa Miller
相关产品推荐
相关产品推荐

