C#数组未获取输入值,输出全为零问题求助
问题分析与修复方案
核心问题
你目前的代码完全没有将用户输入的分数存入数组,只是调用Console.ReadLine()读取了输入但直接丢弃了结果。C#中新建的int数组默认所有元素都是0,所以不管是打印未排序数组还是排序后的数组,输出的都是全0值。此外,你的输入循环逻辑也存在错误,导致输入次数和数组长度不匹配。
修复后的完整代码
namespace HighScoreTable { class Program { static void Main(string[] args) { bool valid = false; int HSTable = 0; while (!valid) { Console.WriteLine("How many high scores do you want?"); if (Int32.TryParse(Console.ReadLine(), out HSTable) && HSTable > 0) { valid = true; } else { Console.Write("Invalid Input. "); } } Console.WriteLine("\n\nYou want " + HSTable + " highscores."); // 提前创建数组,准备存储输入的分数 int[] highscores = new int[HSTable]; Console.WriteLine("\nEnter your highscores:"); // 遍历数组的每个位置,读取并验证输入的分数 for (int i = 0; i < HSTable; i++) { bool scoreValid = false; while (!scoreValid) { Console.Write($"Enter score #{i+1}: "); if (Int32.TryParse(Console.ReadLine(), out int score)) { highscores[i] = score; scoreValid = true; } else { Console.WriteLine("Invalid score. Please enter an integer."); } } } Console.WriteLine(); Console.WriteLine("High Scores - Unsorted"); PrintArray(highscores); SortArrayHighToLow(highscores); Console.WriteLine(); Console.WriteLine("High Scores - Sorted"); PrintArray(highscores); Console.Write("\n\nPress any key to exit . . ."); Console.ReadKey(); } public static void PrintArray(int[] highscores) { for (int i = 0; i < highscores.GetLength(0); i++) { Console.WriteLine(highscores[i]); } } static void SortArrayHighToLow(int[] numbers) { int tmp; for (int i = 1; i < numbers.Length; i++) { for (int j = i; j > 0 && numbers[j] > numbers[j - 1]; j--) { tmp = numbers[j]; numbers[j] = numbers[j - 1]; numbers[j - 1] = tmp; } } } } }
关键改动说明
- 提前创建数组并填充数据:在输入阶段就创建
highscores数组,通过循环逐个读取用户输入的分数,解析为整数后存入数组对应索引的位置,确保输入的内容被正确保存。 - 完善输入验证:给分数输入也添加了验证逻辑,避免用户输入非整数内容导致程序出错。
- 修正循环逻辑:移除了原代码中多余的
Console.ReadLine()调用,改为从i=0开始遍历数组,确保输入次数和数组长度完全匹配。 - 优化输入提示:添加了
Enter score #{i+1}:的提示,让用户清楚知道当前需要输入第几个分数,提升交互体验。
内容的提问来源于stack exchange,提问作者ChromeWaltz
相关产品推荐
相关产品推荐

