23.3练习。 题目: 用c++设计一个程序要求用户输入一个文件名,然后读取该文件中的整数,计算这些整数的平均值,并输出结果。如果文件不存在或无法打开,则抛出一个自定义的异常对象,并在异常处理程序中输出错误信息。 要求: 使用自定义的异常类来表示文件打开异常,命名为"FileOpenException"。 使用异常处理机制来捕获并处理可能出现的文件打开异常在异常处理程序中输出错误信息:“无法打开文件!”。。提示: 可以定义一个函数来读取文件中的整数,并在该函数中抛出异常。在主函数中调用该函数,并使用try-catch语句来捕获和处理异常。
时间: 2024-02-23 13:02:38 浏览: 110
好的,下面是使用 C++ 实现该程序的代码:
```cpp
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
class FileOpenException : public exception {
public:
const char* what() const throw() {
return "无法打开文件!";
}
};
vector<int> read_integers_from_file(string filename) {
vector<int> integers;
ifstream file(filename);
if (!file.is_open()) {
throw FileOpenException();
}
int number;
while (file >> number) {
integers.push_back(number);
}
file.close();
return integers;
}
int main() {
string filename;
cout << "请输入文件名:";
cin >> filename;
try {
vector<int> integers = read_integers_from_file(filename);
double average = 0;
for (int number : integers) {
average += number;
}
average /= integers.size();
cout << "整数的平均值为:" << average << endl;
}
catch (const FileOpenException& e) {
cerr << e.what() << endl;
}
return 0;
}
```
首先定义了一个名为`FileOpenException`的自定义异常类,用于表示文件打开异常。该类继承自 C++ 标准库中的`exception`类,重写了`what()`方法以返回错误信息。
然后定义了一个名为`read_integers_from_file`的函数,用于读取文件中的整数。该函数使用了`ifstream`来打开文件,并在文件无法打开时抛出自定义的`FileOpenException`异常。然后读取文件中的每个整数,并将其存储到一个`vector`中。最后关闭文件并返回整数`vector`。
在主函数中,先输入文件名,然后调用`read_integers_from_file`函数读取整数,并计算平均值。如果出现了`FileOpenException`异常,则会在异常处理程序中输出错误信息:“无法打开文件!”。如果一切正常,则会输出整数的平均值。
希望这个程序能够满足你的需求!
阅读全文