用C++编写代码,使其可以启动 windows 的记事本, 输入若干个实数, 各实数之间用空格分隔, 保存到文本文件“C: \ DATA. TXT”中。 设计一个程序按每行五个数据输出文件中的所有数, 并在最后一行输出文件中实数的个数、 总和和平均值。 为了防止在读取文件数据时出现一些异常错误而引起程序崩溃, 要求在程序中加入异常处理。
时间: 2024-02-03 19:13:33 浏览: 112
用C++做的记事本程序
5星 · 资源好评率100%
下面是代码实现:
```cpp
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
int main() {
try {
// 启动记事本
system("notepad");
// 输入若干个实数
vector<double> nums;
double num;
cout << "请输入若干个实数,以空格分隔,按回车键结束输入:" << endl;
while (cin >> num) {
nums.push_back(num);
}
// 保存到文本文件
ofstream outfile("C:\\DATA.TXT");
if (!outfile) {
throw runtime_error("无法打开文件");
}
for (int i = 0; i < nums.size(); i++) {
outfile << nums[i] << " ";
}
outfile.close();
// 读取文件并输出
ifstream infile("C:\\DATA.TXT");
if (!infile) {
throw runtime_error("无法打开文件");
}
double sum = 0;
int count = 0;
string line;
while (getline(infile, line)) {
string::size_type pos = 0;
while ((pos = line.find_first_of("0123456789", pos)) != string::npos) {
double num = stod(line.substr(pos));
pos = line.find_first_not_of("0123456789.", pos);
nums.push_back(num);
sum += num;
count++;
}
}
infile.close();
// 输出结果
cout << "文件中的实数如下:" << endl;
for (int i = 0; i < nums.size(); i++) {
cout << nums[i] << " ";
if ((i+1) % 5 == 0) {
cout << endl;
}
}
if (nums.size() % 5 != 0) {
cout << endl;
}
cout << "实数的个数为:" << count << endl;
cout << "实数的总和为:" << sum << endl;
cout << "实数的平均值为:" << sum / count << endl;
} catch (exception& e) {
cerr << "发生异常: " << e.what() << endl;
}
return 0;
}
```
该程序使用了 `system()` 函数启动记事本,使用了 STL 中的 `vector` 存储实数,使用了 `ofstream` 和 `ifstream` 分别写入和读取文件,使用了 `getline()` 函数按行读取文件内容,使用了异常处理机制避免程序崩溃。
阅读全文