编程作业:统计文本文件整数个数,或无需初始化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
相关产品推荐
相关产品推荐

