C#实现栈时Display方法输出整数ASCII值的问题
解决C#栈Display方法输出整数为ASCII值的问题
这问题我之前也踩过坑!核心原因要么是你存进去的数值本身就不对,要么是输出的时候做了多余的类型转换,咱们一步步排查:
先定位问题根源
你说存的是System.Int32类型的3,但输出是51——51刚好是字符'3'的ASCII码值。这说明两种可能:
- 你以为自己存的是整数3,实际存的是字符'3'的ASCII值51
- 你存的确实是3,但Display方法里把它转换成了字符再取ASCII码输出
对应的解决方案
1. 检查元素添加逻辑
如果是从控制台输入获取数值,别直接把输入的字符转成int(这会得到ASCII码),要用int.Parse或int.TryParse解析字符串:
// ✅ 正确的添加方式 string input = Console.ReadLine(); if (int.TryParse(input, out int value)) { yourStack.Push(value); // 这里存的是真正的整数3 } else { Console.WriteLine("请输入有效的整数"); } // ❌ 错误的添加方式(会导致存ASCII值) char inputChar = Console.ReadKey().KeyChar; int value = (int)inputChar; // 输入'3'会得到51,而不是整数3 yourStack.Push(value);
2. 检查Display方法的输出逻辑
确保你直接输出存储的int值,不要做多余的转换:
// ✅ 正确的Display方法 public void Display() { foreach (var ele in stackElements) { Console.WriteLine(ele.value); // 直接输出int,3就会显示3 } } // ❌ 错误的方式(会把3转成51输出) public void Display() { foreach (var ele in stackElements) { // 错误地把int转成字符再取ASCII码 char charValue = char.Parse(ele.value.ToString()); Console.WriteLine((int)charValue); // 3→"3"→'3'→输出51 } }
快速验证方法
你可以在Display里加一行详细输出,确认存储的数值和类型:
Console.WriteLine($"存储的值:{ele.value},类型:{ele.value.GetType()}");
- 如果输出是
存储的值:51,类型:System.Int32:问题在添加逻辑,你存的就是51 - 如果输出是
存储的值:3,类型:System.Int32但显示的是51:问题在输出逻辑的多余转换
内容的提问来源于stack exchange,提问作者Swanand Pangam
相关产品推荐
相关产品推荐

