【题目 17】文件操作 从键盘读入一行字符,把其中的数字字符依次存放到文件 number.txt 中。再从文件 number.txt 中, 读出 5 个整数放在整型数组中,并求出其中的最大值、最小值和平均值。c++
时间: 2024-09-06 16:01:45 浏览: 85
在C++中进行文件操作,可以使用标准库中的fstream类来完成。下面是如何实现题目要求的步骤:
1. 首先,使用`getline()`函数从标准输入(键盘)读入一行字符。
2. 接着,创建并打开一个输出文件流`ofstream`,将这行字符中的数字字符写入到文件`number.txt`中。
3. 然后,创建并打开一个输入文件流`ifstream`,从文件`number.txt`中读出前5个整数,并存放在一个整型数组中。
4. 遍历数组,计算最大值、最小值和平均值。
具体的代码实现可能如下:
```cpp
#include <iostream>
#include <fstream>
#include <string>
#include <limits>
int main() {
// 从键盘读入一行字符
std::string line;
std::getline(std::cin, line);
// 创建输出文件流并打开文件
std::ofstream outFile("number.txt");
if (!outFile.is_open()) {
std::cerr << "无法打开输出文件" << std::endl;
return 1;
}
// 把数字字符写入文件
for (char ch : line) {
if (isdigit(ch)) {
outFile << ch;
}
}
outFile.close(); // 关闭文件
// 从文件读出整数到数组
std::ifstream inFile("number.txt");
if (!inFile.is_open()) {
std::cerr << "无法打开输入文件" << std::endl;
return 1;
}
const int arraySize = 5;
int numbers[arraySize];
for (int i = 0; i < arraySize && inFile >> numbers[i]; ++i) {}
inFile.close(); // 关闭文件
// 如果读取的整数不足5个,处理错误
if (i < arraySize) {
std::cerr << "文件中的整数不足5个" << std::endl;
return 1;
}
// 计算最大值、最小值和平均值
int maxVal = std::numeric_limits<int>::min();
int minVal = std::numeric_limits<int>::max();
int sum = 0;
for (int num : numbers) {
if (num > maxVal) maxVal = num;
if (num < minVal) minVal = num;
sum += num;
}
double average = static_cast<double>(sum) / arraySize;
// 输出结果
std::cout << "最大值:" << maxVal << std::endl;
std::cout << "最小值:" << minVal << std::endl;
std::cout << "平均值:" << average << std::endl;
return 0;
}
```
请注意,这段代码假设用户输入的数字字符数量至少为5个,并且文件中至少包含5个整数。在实际应用中,可能需要对代码进行更健壮的错误处理和输入验证。
阅读全文