编写程序实现txt文件的读写功能,首先按行读取文件,并显示,最后计算每行最后三个数字的平均值,并添加到对应行的末尾,并写入data_updated.txt文件中。

编写程序实现txt文件的读写功能,首先按行读取文件,并显示,最后计算每行最后三个数字的平均值,并添加到对应行的末尾,并写入data_updated.txt文件中。


#include <stdio.h>
 
int main()
{
    //下面是写数据,将数字0~9写入到data.txt文件中
    FILE *fpWrite=fopen("a.txt","w");
    if(fpWrite==NULL)
    {
        return 0;
    }
    for(int i=0;i<10;i++)
        fprintf(fpWrite,"%d ",i);
    fclose(fpWrite);
    //下面是读数据,将读到的数据存到数组a[10]中,并且打印到控制台上
    int a[10]={0};
    FILE *fpRead=fopen("a.txt","r");
    if(fpRead==NULL)
    {
        return 0;
    }
    for(int i=0;i<10;i++)
    {
        fscanf(fpRead,"%d ",&a[i]);
        printf("%d ",a[i]);
    }
    getchar();//等待
 
    return 1;
}

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/1056678
  • 这篇博客也不错, 你可以看下【例11.1】输入一行字符,写入文件data.txt,读取并输出文件data.txt的内容。
  • 除此之外, 这篇博客: 关于哈利波特检索这道题的思路中的 一、如何从txt文件中读取? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 看下面这个小程序你大概就可以知道是怎么回事了.
    首先,你应当建立一个文件夹,然后把你的程序以及记事本文件全部装入,值得注意的地方是文件夹中的txt文件的末尾没有.txt的后缀,但是在程序中读取的时候就得用上了,下面是假装你的记事本文档的名字叫做book的时候对book里面的内容进行读取的代码:

    #include<iostream>
    #include<fstream>
    using namespace std;
    int main()
    {
    	fstream ifs;
    	ifs.open("book.txt",ios::in);
    	//注意,这个时候就必须要写.txt的后缀了.
    	string str;
    	while(getline(ifs,str))
    	{
    		//这个循环会把book里面的内容逐行逐行地读取出来.
    		//并且当文件读完的时候,就会从循环里面退出.
    		//可以试一下读进再输出的操作.
    		cout<<str<<endl;
    		//然后你就会发现,这个程序确实可以运行.
    		//不过往记事本里面塞中文,会出来乱码.
    		//不过哈利波特似乎里面没有中文.
    		//并没有什么关系.
    	}
    	ifs.close();//格式.这一行并不可以省略.
    }
    
  • 以下回答由chatgpt基于相关博客总结生成:

    实现读取、计算和写入txt文件的过程可以分为以下几个步骤:

    1. 打开txt文件并按行读取:

    使用fstream库打开txt文件,通过while循环和getline函数按行读取文件内容,示例代码如下:

    ifstream ifs("data.txt");  // 打开txt文件
    if (!ifs.is_open()){      // 判断文件是否打开成功
        cout << "文件打开失败!" << endl;
        return 0;
    }
    string line;
    while(getline(ifs,line)){  // 按行读取文件内容
        cout << line << endl;  // 在屏幕上显示读取到的行
    }
    ifs.close();              // 关闭文件
    
    1. 计算每行末尾三个数字的平均值并添加到每行末尾:

    使用stringstream库中的stringstream把每行字符串转化为流,再使用while和>>运算符提取每行最后三个数字并累加求和,最后计算平均值并将其添加到字符串的末尾,示例代码如下:

    // 读取文件内容
    ifstream ifs("data.txt");
    if (!ifs.is_open()){
        cout << "文件打开失败!" << endl;
        return 0;
    }
    string line;
    while(getline(ifs,line)){
        // 计算平均值
        double sum = 0;
        int count = 0;
        stringstream ss(line);
        int temp;
        while (ss >> temp){
            if (++count > 3){
                sum += temp;
            }
        }
        double avg = sum / 3;
        // 添加平均值到末尾
        stringstream ss1(line);
        string newline;
        int t;
        while (ss1 >> t){
            newline += to_string(t);
            newline += " ";
        }
        newline += to_string(avg);
        // 输出更新后的行内容
        cout << newline << endl;
    }
    ifs.close();
    
    1. 把更新后的内容保存到新的data_updated.txt文件中:

    使用ofstream库创建并打开data_updated.txt文件,在while循环中把更新后的每行内容写入文件中,示例代码如下:

    ```c++ // 写入更新后的内容 ofstream ofs("data_updated.txt"); // 创建并打开新文件 if (!ofs.is_open()){ cout << "文件创建失败!" << endl; return 0; } ifstream ifs("data.txt"); // 打开原文件 if (!ifs.is_open()){ cout << "文件打开失败!" << endl; return 0; } string line; while(getl