补充一点知识点
一、文件写入
写文件步骤如下:
-
包含头文件
#include <fstream>
-
创建流对象(自己起的流对象名字)
ofstream ofs;
-
打开文件
ofs.open(“文件路径”,打开方式);
-
写数据
ofs << “写入的数据”;
-
关闭文件
ofs.close();
打开方式 | 解释 |
---|---|
ios::in | 为读文件而打开文件 |
ios::out | 为写文件而打开文件 |
ios::ate | 初始位置:文件尾 |
ios::app | 追加方式写文件 |
ios::trunc | 如果文件存在先删除,再创建 |
ios::binary | 二进制方式 |
#include <fstream>
void test01()
{
ofstream ofs;
ofs.open("test.txt", ios::out);
ofs << "1" << endl;
ofs.close();
}
二、题目
#include<iostream>
using namespace std;
#include<fstream>
int main(){
ifstream file;
double num[10];
file.open("data.txt",ios::in);
if(!file.is_open()){
cout<<"不能打开"<<endl;
return 1;
}
int i =0;
while(!file.eof()&&i<6){//从file文件中写入数组,直到全部读取完,eof是文档最后一个字符
file>>num[i];
i++;
}
double sum = 0;
int count=0;
for(int i=0;i<6;i++){
if (num[i]>0){
sum+=num[i];
count++;
}
}
int aver=sum/count;
ofstream out;
out.open("out.txt");
out<<aver<<endl;
out.close();
return 0;
}
我一开始犯了个问题 把数组大小改成了10 导致一直出错,原因是由于数组中有未初始化的元素,累加
sum
时可能会将这些未定义的值计算在内,导致求得的平均值aver
是错误的。
调试结果: