如何从txt文件获取最大值与负数数量并将结果输出至文件
解决从numbers.txt找最大值、统计负数并输出指定结果的问题
需求明确:从numbers.txt文件读取数据,找出最大值、统计负数数量;总和要同时输出到控制台和另一个文本文件,其余结果仅输出到控制台。
你的numbers.txt内容
-4 53 -5 -3 2
问题分析
你原来的代码只处理了总和和总数,没在读取数据的过程中计算最大值和负数数量;尝试的代码里用了num[i]但未定义数组,且INT_MIN需要引入<climits>头文件才能使用,变量也没做正确初始化。
修改后的完整代码
#include <iostream> #include <fstream> #include <climits> // 引入INT_MIN的头文件 using namespace std; int main() { int n = 0; int sum = 0, total = 0; int highest = INT_MIN; // 初始化最大值为最小整数,确保第一个数能覆盖它 int negativeCount = 0; // 初始化负数计数器为0 // 读取numbers.txt ifstream inputFile("numbers.txt"); if (!inputFile) { // 检查文件是否成功打开 cout << "无法打开numbers.txt文件" << endl; return 1; } while (inputFile >> n) { sum += n; total++; // 更新最大值 if (n > highest) { highest = n; } // 统计负数数量 if (n < 0) { negativeCount++; } } inputFile.close(); // 关闭输入文件 // 计算平均值,用float避免整数除法丢失精度 float average = static_cast<float>(sum) / total; // 输出总和到控制台 cout << "Total result: " << sum << endl; // 输出总和到result.txt文件 ofstream outputFile("result.txt"); if (outputFile) { outputFile << "Total result: " << sum << endl; outputFile.close(); } else { cout << "无法创建输出文件result.txt" << endl; } // 输出其余结果到控制台 cout << "Numbers added: " << total << endl; cout << "Average number: " << average << endl; cout << "Maximum number: " << highest << endl; cout << "Negative numbers: " << negativeCount << endl; return 0; }
关键修改说明
- 新增
<climits>头文件:用来调用INT_MIN,确保最大值初始值比所有可能的整数都小,第一个读取的数能正确赋值给它。 - 变量初始化:
highest设为INT_MIN,negativeCount设为0,避免未初始化的垃圾值影响结果。 - 读取循环内逻辑优化:每读一个数就同步更新最大值、统计负数,无需额外定义数组(新手没必要用数组,浪费内存)。
- 文件操作优化:用
ifstream专门读文件,ofstream专门写文件,添加文件打开失败判断,避免程序崩溃。 - 平均值计算优化:用
static_cast<float>做类型转换,保证除法是浮点数运算,不会丢失小数部分。 - 修复拼写错误:把
Maxiumum改成正确的Maximum。
内容的提问来源于stack exchange,提问作者SharkFish423
相关产品推荐
相关产品推荐

