C#控制台应用程序在执行if语句前崩溃的问题求助
问题排查与解决方案:C#控制台程序在if语句前异常行为
嘿,我来帮你搞定这个问题!你的程序看起来“崩溃”的核心原因其实是对Console.Read()的用法理解有误,咱们一步步理清楚:
问题根源
Console.Read()返回的是字符的ASCII码,不是输入的数字:当你输入1并按下回车时,Console.Read()拿到的是字符'1'对应的ASCII值(也就是49),而不是整数1。这直接导致你的if (UserInput1 == 1)条件永远不成立,后续的代码逻辑完全偏离预期。- 输入缓冲区残留控制字符:输入完数字后按下的回车(ASCII 13)和换行(ASCII 10)会留在输入流里,后续的
Console.Read()会直接读取这些控制字符,而不是等待用户输入新内容,这会让程序看起来像是“崩溃”或者跳过了输入步骤。
修复方案
改用Console.ReadLine()读取完整的输入行,再配合int.TryParse()进行安全的类型转换,同时添加输入验证确保用户输入有效。下面是修正后的代码:
static void Main(string[] args) { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("1. SHC "); // 读取用户选择并验证 string selectionInput = Console.ReadLine(); if (int.TryParse(selectionInput, out int userInput1) && userInput1 == 1) { // 读取质量,确保输入有效 Console.WriteLine("Mass (kg): "); while (!int.TryParse(Console.ReadLine(), out int shcMass)) { Console.WriteLine("请输入有效的整数质量,请重试:"); } // 读取比热容 Console.WriteLine("Specific Heat Capacity (J/Kg/°C): "); while (!int.TryParse(Console.ReadLine(), out int shcValue)) { Console.WriteLine("请输入有效的整数比热容,请重试:"); } // 读取温差 Console.WriteLine("Temperature Difference (△Ø): "); while (!int.TryParse(Console.ReadLine(), out int shcTempDiff)) { Console.WriteLine("请输入有效的整数温差,请重试:"); } // 计算并输出结果 int shcFinal = shcMass * shcValue * shcTempDiff; Console.WriteLine($"Energy: {shcFinal}"); } else { Console.WriteLine("无效的选择,请输入数字1来进行SHC计算"); } // 暂停窗口,方便查看结果 Console.WriteLine("按任意键退出..."); Console.ReadLine(); }
关键修正点说明
- 替换
Console.Read()为Console.ReadLine():读取完整的输入行,避免控制字符残留影响后续输入。 - 使用
int.TryParse()安全转换:防止用户输入非数字内容导致的格式异常,同时验证输入的有效性。 - 添加输入验证循环:如果用户输入无效,会提示重新输入,提升程序的健壮性。
- 添加窗口暂停逻辑:程序运行结束后不会直接关闭控制台窗口,方便查看计算结果。
内容的提问来源于stack exchange,提问作者Max Thomas
相关产品推荐
相关产品推荐

