为何输入字符串时ELSE IF语句仍执行?TryParse逻辑疑问
问题原因分析
你遇到的问题核心在于:当输入非数字时,程序执行完错误提示后没有终止运行,而是继续执行了后续的温度判断逻辑。
具体细节:
- 输入非数字时,
int.TryParse返回false,进入else分支,你给numTemp赋值为0并打印了错误提示,但这个分支执行完毕后,程序会继续往下走,执行后面的if-else if判断链。 - 因为0小于15,所以必然会触发
else if (numTemp < 15)的分支,输出对应的提示。
解决方案
有两种常用的解决思路:
思路1:错误处理后直接终止程序
在错误提示的分支里,添加终止程序执行的代码,不让后续判断逻辑运行。比如用return(如果这段代码在方法内)或者Environment.Exit(0):
Console.WriteLine("Enter the temperature of today: "); string temperature = Console.ReadLine(); int numTemp; int number; if (int.TryParse(temperature, out number)) { numTemp = number; } else { Console.WriteLine("Value entered, was no number."); Console.Read(); return; // 如果在方法中,用return终止;控制台程序也可以用Environment.Exit(0) } // 后续温度判断逻辑 if (numTemp > 15) { Console.WriteLine("The jacket is completely unncessarry for this temperature."); } else if (numTemp == 15) { Console.WriteLine("Just the sweater is gonna be perfectly okay for you."); } else if (numTemp < 15) { Console.WriteLine("You need a jacket, my friend"); } else { Console.WriteLine("The weather is for an apocalypse!"); } Console.Read();
思路2:把温度判断放到解析成功的分支内
只在int.TryParse成功时,才执行温度判断逻辑,错误情况直接提示后结束:
Console.WriteLine("Enter the temperature of today: "); string temperature = Console.ReadLine(); int numTemp; if (int.TryParse(temperature, out numTemp)) { // 只有解析成功才执行判断 if (numTemp > 15) { Console.WriteLine("The jacket is completely unncessarry for this temperature."); } else if (numTemp == 15) { Console.WriteLine("Just the sweater is gonna be perfectly okay for you."); } else if (numTemp < 15) { Console.WriteLine("You need a jacket, my friend"); } else { Console.WriteLine("The weather is for an apocalypse!"); } } else { Console.WriteLine("Value entered, was no number."); } Console.Read();
另外,你原来的代码里numTemp在错误分支赋值为0其实没必要,因为错误场景下不需要用到这个变量,直接跳过判断逻辑即可。
内容的提问来源于stack exchange,提问作者AllAboutProgramming
相关产品推荐
相关产品推荐

