用户输入字符串转换为int[]时出现数值不符问题
问题原因与解决方案
哦,我立刻就明白你遇到的问题了!
当你用firstArray.Select(x => Convert.ToInt32(x))的时候,这里的x是字符串中的单个Char类型字符,而Convert.ToInt32(char)方法返回的是该字符的ASCII码值——'1'字符的ASCII码正好是49,这就是为什么输入'1'却得到49的原因。
下面分两种常见场景给你解决方案:
场景1:输入用空格/逗号分隔的数字(比如输入"1 5 8"得到数组[1,5,8])
这应该是你注释里示例想要的效果,先把输入字符串分割成单个数字字符串,再转换为int:
Console.WriteLine("Enter first array (numbers separated by spaces)"); string firstArrayInput = Console.ReadLine(); // 按空格分割,同时移除空项(避免用户多打空格) int[] first = firstArrayInput.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries) .Select(x => int.Parse(x)) .ToArray(); Console.WriteLine("Enter second array (numbers separated by spaces)"); string secondArrayInput = Console.ReadLine(); int[] second = secondArrayInput.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries) .Select(x => int.Parse(x)) .ToArray();
场景2:输入连续的数字字符(比如输入"158"得到数组[1,5,8])
如果是想把每个字符单独转成对应的数字,你可以用字符的ASCII码差值(因为'0'的ASCII码是48,任何数字字符减去'0'就能得到对应的int值),或者用char.GetNumericValue:
Console.WriteLine("Enter first array (continuous digits like '158')"); string firstArray = Console.ReadLine(); // 方法1:利用ASCII码差值 int[] first = firstArray.Select(x => x - '0').ToArray(); Console.WriteLine("Enter second array (continuous digits like '249')"); string secondArray = Console.ReadLine(); // 方法2:使用char.GetNumericValue(需转换为int) int[] second = secondArray.Select(x => (int)char.GetNumericValue(x)).ToArray();
额外建议:添加输入验证
为了避免用户输入非数字内容导致程序崩溃,建议使用int.TryParse做验证:
Console.WriteLine("Enter first array (numbers separated by spaces)"); string firstArrayInput = Console.ReadLine(); var numberStrings = firstArrayInput.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries); List<int> firstList = new List<int>(); foreach (var s in numberStrings) { if (int.TryParse(s, out int num)) { firstList.Add(num); } else { Console.WriteLine($"警告:跳过无效输入 '{s}',它不是有效的整数"); } } int[] first = firstList.ToArray();
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

