编写程序实现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;
}
看下面这个小程序你大概就可以知道是怎么回事了.
首先,你应当建立一个文件夹,然后把你的程序以及记事本文件全部装入,值得注意的地方是文件夹中的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();//格式.这一行并不可以省略.
}
实现读取、计算和写入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(); // 关闭文件
使用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();
使用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