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直接跳出,符合你不录入-1的需求
另外注意你定义的NewOneHundredNumbe数组全程未初始化,如果printArray、loopfortheLoop两个自定义函数中有读取该数组的逻辑,也可能读到垃圾值,建议确认两个函数的参数传参顺序是否正确。
内容的提问来源于stack exchange,提问作者Bryce Robinson
相关产品推荐
相关产品推荐

