c++怎么读取txt里的数据

如题,之前返乡耽误了课,现在在网上看了点网课也没整明白。😭

在D:盘的某文件夹中新建文本文件source.txt,在其中输入10个整数。
编程实现:从文件source.txt中读取数据,将其中的完数写入文件destination.txt中。完数是指:一个数所有的真因子之和,恰好等于它本身。例如:28=1+2+4+7+14,因此,28是一个完数。
要求:文件采用绝对路径方式进行访问,两个文件保存于同一文件夹中

img

img

这其实是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方法关闭文件。