C#:int转short的方法及Console.Read()输入输出不符问题解析
输入与输出数值不一致的原因及解决办法
问题场景
输入数字“6”时,代码输出结果为54,相关代码如下:
{ int intVal; short ShortVal; intVal = Console.Read(); ShortVal = (short)intVal; Console.WriteLine("{0}", ShortVal); }
原因分析
Console.Read()方法读取的是输入流中单个字符的ASCII码值,而非直接读取数字本身。数字字符“6”对应的ASCII码正好是54,所以最终输出的是这个码值,而非输入的数字6。
解决方法
有两种常用方式可以让输出与输入数值保持一致:
方法一:读取整行输入并转换为数值
使用Console.ReadLine()读取完整的输入行,再通过数值转换方法将字符串转为对应数字:
int intVal; short shortVal; // 读取整行输入 string input = Console.ReadLine(); // 尝试将输入字符串转为整数 if (int.TryParse(input, out intVal)) { shortVal = (short)intVal; Console.WriteLine("{0}", shortVal); } else { Console.WriteLine("请输入有效的数字"); }
这种方式支持多位数输入,同时能处理输入无效的情况,更健壮。
方法二:转换ASCII码为对应数字
如果坚持使用Console.Read(),可以将读取到的ASCII码减去字符'0'的ASCII码('0'的ASCII码为48),得到实际数字:
int intVal; short shortVal; intVal = Console.Read(); // 通过ASCII码差值计算实际数字 shortVal = (short)(intVal - '0'); Console.WriteLine("{0}", shortVal);
注意:这种方式仅适用于输入单个数字字符的场景,无法处理多位数。
内容的提问来源于stack exchange,提问作者lucas17create
相关产品推荐
相关产品推荐

