You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数组读取文本文件后错误显示:末尾出现多余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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:34:11