数组读取文本文件后错误显示:末尾出现多余0值
解决数组读取文件后末尾出现多余0的问题
我明白你的问题了——你创建了一个固定大小为10000的int数组,而C#里int类型数组的默认元素值就是0。当你从文件中读取完所有数据后,数组里没被赋值的位置自然保留着默认的0,所以输出时会把这些多余的0也打印出来。下面给你两种实用的解决方案:
方案1:用动态列表List替代固定数组(推荐)
List
static void Main(string[] args) { List<int> numbers = new List<int>(); // 使用using语句自动释放StreamReader资源,避免内存泄漏 using (StreamReader SR = new StreamReader("Data.Txt")) { while (!SR.EndOfStream) { // 用TryParse替代Parse,避免文件中出现非整数行导致程序崩溃 if (int.TryParse(SR.ReadLine(), out int num)) { numbers.Add(num); } } } Console.WriteLine("ARRAY BEFORE SORTING"); // 直接遍历List,只输出实际读取的元素 foreach (int num in numbers) { Console.WriteLine(num); } Console.ReadLine(); }
方案2:保留固定数组,但只遍历实际读取的元素
如果你一定要使用固定大小的数组,可以记录实际读取的元素个数,遍历的时候只到这个个数为止,跳过后面未赋值的0:
static void Main(string[] args) { int size = 10000; int[] array = new int[size]; StreamReader SR = new StreamReader("Data.Txt"); int i = 0; // 加个i < size的判断,防止文件行数超过数组大小导致越界报错 while (!SR.EndOfStream && i < size) { array[i] = int.Parse(SR.ReadLine()); i++; } SR.Close(); // 记得手动关闭流释放资源 Console.WriteLine("ARRAY BEFORE SORTING" ); // 遍历到i(实际读取的元素个数),而不是数组的总长度 for (int x = 0; x < i ; x++) { Console.WriteLine(array[x]); } Console.ReadLine(); }
另外提醒一下:直接用int.Parse如果遇到文件里有非整数的行,会直接抛出异常,建议用int.TryParse做容错处理,就像方案1里那样,让程序更健壮。
内容的提问来源于stack exchange,提问作者user9635235
相关产品推荐
相关产品推荐

