设计一个程序,要求用户输入一个文件名,然后读取该文件中的整数,计算这些整数的平均值,并输出结果。如果文件不存在或无法打开,则抛出一个自定义的异常对象,并在异常处理程序中输出错误信息。 要求: 使用自定义的异常类来表示文件打开异常,命名为"FileOpenException"。 使用异常处理机制来捕获并处理可能出现的文件打开异常。 在异常处理程序中输出错误信息:"无法打开文件!"。 提示: 可以定义一个函数来读取文件中的整数,并在该函数中抛出异常。 在主函数中调用该函数,并使用try-catch语句来捕获和处理异常。用C++写出
时间: 2024-02-23 21:02:04 浏览: 87
好的,这是一个简单的 C++ 程序,可以实现您的需求:
```c++
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
// 自定义异常类
class FileOpenException : public std::exception {
public:
const char* what() const noexcept override {
return "无法打开文件!";
}
};
// 读取文件中的整数并计算平均值
double calc_average(const std::string& filename) {
std::ifstream file(filename);
if (!file.is_open()) {
throw FileOpenException();
}
std::vector<int> nums;
int num;
while (file >> num) {
nums.push_back(num);
}
double sum = 0.0;
for (int n : nums) {
sum += n;
}
return sum / nums.size();
}
// 主函数
int main() {
// 获取文件名
std::string filename;
std::cout << "请输入文件名:";
std::cin >> filename;
try {
// 计算平均值
double avg = calc_average(filename);
std::cout << "平均值:" << avg << std::endl;
}
catch (const FileOpenException& e) {
std::cerr << e.what() << std::endl;
}
return 0;
}
```
程序中首先定义了一个自定义的异常类 `FileOpenException`,表示文件打开异常。然后定义了一个函数 `calc_average`,用于读取文件中的整数并计算平均值。在该函数中,使用 `ifstream` 打开文件,读取文件中的整数,并计算平均值。如果文件不存在或无法打开,就抛出自定义的异常类 `FileOpenException`。在主函数中调用 `calc_average` 函数,并使用 `try-catch` 语句来捕获和处理可能出现的文件打开异常。如果捕获到了 `FileOpenException`,就输出错误信息:"无法打开文件!"。
阅读全文