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

编程作业:统计文本文件整数个数,或无需初始化N读取文件的方法

两种方法解决文本文件整数读取问题:预先统计个数 vs 动态读取

针对你的问题,有两种实用的解决方案,分别对应「预先统计整数个数N」和「无需初始化N直接读取」的需求,下面详细说明:

方法一:先统计整数个数N,再用for循环读取

如果你的场景必须使用固定大小的数组,需要先获取整数个数N,步骤如下:

  • 第一次打开文件,逐个读取整数并计数,得到N;
  • 重置文件指针到开头(或者重新打开文件);
  • 用for (int i = 0; i < N; i++)循环读取每个整数到数组中。

示例代码(C++):

#include <fstream>
#include <iostream>
#include <climits> // 用于处理空数组的INT_MIN
using namespace std;

// SumList函数:计算列表整数和
int SumList(int arr[], int size) {
    int sum = 0;
    for (int i = 0; i < size; i++) {
        sum += arr[i];
    }
    return sum;
}

// FindMax函数:找出列表最大值
int FindMax(int arr[], int size) {
    if (size == 0) return INT_MIN; // 处理空数组边界情况
    int max_val = arr[0];
    for (int i = 1; i < size; i++) {
        if (arr[i] > max_val) {
            max_val = arr[i];
        }
    }
    return max_val;
}

int main() {
    ifstream inputFile("Input.txt");
    if (!inputFile.is_open()) {
        cerr << "无法打开文件!" << endl;
        return 1;
    }

    // 第一步:统计整数个数N
    int N = 0;
    int tempNum;
    while (inputFile >> tempNum) {
        N++;
    }

    // 重置文件指针到开头,清除EOF标记
    inputFile.clear();
    inputFile.seekg(0, ios::beg);

    // 第二步:读取N个整数到数组
    int* numArray = new int[N];
    for (int i = 0; i < N; i++) {
        inputFile >> numArray[i];
    }

    // 调用作业要求的函数
    int totalSum = SumList(numArray, N);
    int maxNumber = FindMax(numArray, N);

    cout << "整数总和:" << totalSum << endl;
    cout << "最大值:" << maxNumber << endl;

    // 释放内存并关闭文件
    delete[] numArray;
    inputFile.close();
    return 0;
}

方法二:无需预先知道N,用动态容器直接读取

这种方法更灵活,是现代编程中更推荐的写法——利用支持动态扩容的容器(比如C++的vector),直接逐个读取整数并添加到容器中,不需要提前统计个数。

示例代码(C++):

#include <fstream>
#include <vector>
#include <iostream>
#include <climits>
using namespace std;

// SumList函数:计算vector中整数的和
int SumList(const vector<int>& nums) {
    int sum = 0;
    for (int num : nums) {
        sum += num;
    }
    return sum;
}

// FindMax函数:找出vector中的最大值
int FindMax(const vector<int>& nums) {
    if (nums.empty()) return INT_MIN;
    int max_val = nums[0];
    for (int num : nums) {
        if (num > max_val) {
            max_val = num;
        }
    }
    return max_val;
}

int main() {
    ifstream inputFile("Input.txt");
    if (!inputFile.is_open()) {
        cerr << "无法打开文件!" << endl;
        return 1;
    }

    vector<int> nums;
    int num;
    // 直接读取所有整数到vector,无需预先知道个数
    while (inputFile >> num) {
        nums.push_back(num);
    }

    // 调用函数处理
    int totalSum = SumList(nums);
    int maxNumber = FindMax(nums);

    cout << "整数总和:" << totalSum << endl;
    cout << "最大值:" << maxNumber << endl;
    cout << "整数个数:" << nums.size() << endl; // 如果需要个数,直接用size()获取

    inputFile.close();
    return 0;
}

两种方法对比

  • 方法一:适合必须使用固定数组的场景,但需要两次读取文件,效率稍低;
  • 方法二:代码更简洁,无需额外统计步骤,容器会自动管理内存,适配大多数现代编程需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:35:39