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

C++读取外部文件整数值存入数组并输出的实现方法

问题原因与修复方案

代码核心问题

  • 头文件缺失:代码使用了cout/cerr、time()函数,但没有引入<iostream>和<ctime>头文件,会直接导致编译失败。
  • eof()读取逻辑错误:所有读取文件的循环均使用while(!infile.eof())写法,该写法会在文件末尾多读一次无效值,导致统计结果偏差、数组存入垃圾值。正确写法是直接将读取操作作为循环判断条件,读取成功才进入循环处理。
  • 数组定义与使用错误:
    1. 你将arraydisplay数组定义在while循环内部,每次循环都会重新创建数组,循环结束后数组直接销毁,无法保存读取到的数值
    2. 尝试用{ infile >> arrayvalues }给数组初始化是错误的,>>运算符返回的是流对象本身,无法直接作为数组元素的初始值
    3. 最后输出arraydisplay[50]属于数组越界访问,数组长度为50时下标合法范围是0~49,越界访问会触发未定义行为(崩溃/输出乱值)
  • 错误提示不匹配:打开的文件是randomnumbers.txt,但报错信息写的是inputfile.txt,会误导问题排查。

修复后的完整代码

#include <fstream>
#include <cstdlib>
#include <iostream>
#include <ctime>
using namespace std;

//function 1 创建存储随机数的文件
void createfile() {
    srand(time(0));
    ofstream randNums("randomnumbers.txt");
    for (int counter = 0; counter < 50; counter++) {
        int generatednum = rand() % 105 + 2;
        randNums << generatednum << endl;
    }
    randNums.close();
} 

//function 2 统计采摘苹果数低于25的人数
void countundertwentyfive() {
    int under25count;
    int under25amount = 0;
    ifstream infile;
    infile.open("randomnumbers.txt");
    if (infile.fail())
    {
        cerr << "文件打开失败:randomnumbers.txt";
        abort();
    }
    
    while (infile >> under25count) {
        if (under25count < 25) {
            under25amount++;
        }
    }
    cout << under25amount << " 人采摘的苹果数低于25个。" << endl;
    infile.close();
}

//function 3 统计采摘苹果数在80到100之间的人数
void btwn80and100() {
    int eightyand100apples;
    int under80and100amount = 0;
    ifstream infile;
    infile.open("randomnumbers.txt");
    if (infile.fail())
    {
        cerr << "文件打开失败:randomnumbers.txt";
        abort();
    }

    while (infile >> eightyand100apples) {
        if (eightyand100apples >= 80 && eightyand100apples <= 100) {
            under80and100amount++;
        }
    }
    cout << under80and100amount << " 人采摘的苹果数在80到100个之间。" << endl;
    infile.close();
}

//function 4 计算人均采摘苹果数
void averageapplepicked() {
    int numbergetter;
    int sum = 0;
    int count = 0;
    ifstream infile;
    infile.open("randomnumbers.txt");
    if (infile.fail())
    {
        cerr << "文件打开失败:randomnumbers.txt";
        abort();
    }

    while (infile >> numbergetter) {
        sum += numbergetter;
        count++;
    }
    int avg = sum / count;
    cout << "人均采摘苹果数约为 " << avg << " 个" << endl;
    infile.close();
}

int main() {
    createfile();
    countundertwentyfive();
    btwn80and100();
    averageapplepicked();

    int arrayvalues;
    int arraydisplay[50];
    int idx = 0;
    ifstream infile;
    infile.open("randomnumbers.txt");
    if (infile.fail())
    {
        cerr << "文件打开失败:randomnumbers.txt";
        abort();
    }
    while (infile >> arrayvalues && idx < 50) {
        arraydisplay[idx++] = arrayvalues;
    }
    // 逐个输出数组元素
    cout << "文件中存储的所有数值如下:" << endl;
    for(int i = 0; i < idx; i++) {
        cout << arraydisplay[i] << " ";
        // 每10个换一行方便查看
        if((i+1)%10 == 0) cout << endl;
    }
    infile.close();

    return 0;
}

内容的提问来源于stack exchange,提问作者tgol。

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:06:02