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

C++读取文本文件数字排序出现异常数值问题求助

问题根因与修复方案

核心错误点

  • 错误使用while (!inFile.eof())判断文件结束:C++的eof()会在读取操作失败后才会置位,当读完文件最后一个数值-1时,eof()仍处于false状态,循环会多执行一次。本次inFile >>操作会读取失败,对应数组位置存入未初始化的垃圾值,就是你看到的较大负数。
  • 未实现「读到-1就停止、不录入-1」的逻辑:当前代码会把文件末尾的-1也存入数组,叠加上面的多轮读取操作,会超出你定义的100长度数组的边界,出现内存访问异常,导致数值错乱。
  • 补充说明:你提供的100Numbers.txt文件本身就包含622这个数值,不属于异常值,可核对文件内容确认。

修复方案

直接替换读取文件的循环逻辑即可:

// 替换原有的while (!inFile.eof()) 整个循环块
while (Size < NUMBER && inFile >> OneHundredNumber[Size]) {
    // 读到-1直接跳出,不存入数组也不增加计数
    if (OneHundredNumber[Size] == -1) {
        break;
    }
    Size++;
}

上述修改逻辑说明:

  1. 先判断数组是否已满,从根源避免越界问题
  2. 直接把读取操作作为循环判断条件,读取失败(包括到达文件末尾)时直接退出循环,不会多读一轮垃圾值
  3. 读到终止符-1直接跳出,符合你不录入-1的需求

另外注意你定义的NewOneHundredNumbe数组全程未初始化,如果printArray、loopfortheLoop两个自定义函数中有读取该数组的逻辑,也可能读到垃圾值,建议确认两个函数的参数传参顺序是否正确。

内容的提问来源于stack exchange,提问作者Bryce Robinson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:45:04