如题,之前返乡耽误了课,现在在网上看了点网课也没整明白。😭
在D:盘的某文件夹中新建文本文件source.txt,在其中输入10个整数。
编程实现:从文件source.txt中读取数据,将其中的完数写入文件destination.txt中。完数是指:一个数所有的真因子之和,恰好等于它本身。例如:28=1+2+4+7+14,因此,28是一个完数。
要求:文件采用绝对路径方式进行访问,两个文件保存于同一文件夹中
这其实是3个问题
1.如何读文件
2.如何判断完数
3.如何写文件
读写文件都需要先open,读文件用r参数,写文件用w+参数
读指令是fscanf,它跟scanf很类似,无非一个是从控制台读取一个是从文件读取,fscanf需要多传入一个文件指针,其他没什么区别
写指令是fprintf,跟printf也很类似,也是多了个指针参数而已
至于如何判断完数,就是两个循环的事
下面是完整代码实现和解释
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
// 判断一个数是否是完数
bool isPerfect(int n)
{
int sum = 0;
for (int i = 1; i < n; i++)
{
if (n % i == 0)
{
sum += i;
}
}
return sum == n;
}
int main()
{
// 打开文件source.txt,以输入流的方式
ifstream fin("D:\\source.txt");
if (!fin)
{
cout << "打开文件失败!" << endl;
return -1;
}
// 打开文件destination.txt,以输出流的方式
ofstream fout("D:\\destination.txt");
if (!fout)
{
cout << "打开文件失败!" << endl;
return -1;
}
// 从文件中读取数据
int n;
while (fin >> n)
{
// 如果是完数,则写入文件
if (isPerfect(n))
{
fout << n << " ";
}
}
// 关闭文件
fin.close();
fout.close();
return 0;
}
我们使用C++中的ifstream类和ofstream类来打开文件,并使用>>运算符来从文件中读取数据和向文件中写入数据。最后使用close方法关闭文件。