C++文件输入输出
题目
给出一个txt文件,里边包含了100件商品的名称,单价,数量,求总共花费多少钱、平均价格,要求以文件输入输出
code
#include <iostream>
#include <fstream>
#include <cstring>
#include <iomanip>
using namespace std;
int main(){
string name;
long price[100],num[100];
double sum=0;
long count=0;
double ave = 0;
ofstream write;//写
ifstream read;//读
read.open("detail.txt");
write.open("detail.txt",ios::app);
if(read.is_open()){
cout<<"success"<<endl;
}else{
cout<<"fail"<<endl;
}
for(int i=0;i<100;i++){
read>>name;
read>>price[i];
read>>num[i];
}
read.close();
for(int i=0;i<100;i++){
sum += price[i]*num[i];
count += num[i];
}
ave = sum/count;
write<<endl;
write<<sum<<endl;
write<<fixed<<setprecision(7)<<ave;
write.close();
return 0;
}
知识点
1.文件的输入输出
数据类型 | 描述 |
---|---|
ofstream | 该数据类型表示输出文件流,用于创建文件并向文件写入信息。 |
ifstream | 该数据类型表示输入文件流,用于从文件读取信息。 |
fstream | 该数据类型通常表示文件流,且同时具有 ofstream 和 ifstream 两种功能,这意味着它可以创建文件,向文件写入信息,从文件读取信息。 |
代码中同时用到了ofsteam、ifstream,所以创建了read、write两个文件对象,可以直接用fstream代替,只创建一个文件对象。
要在C++中进行文件处理,必须在 C++ 源代码文件中包含头文件 <iostream> 和 <fstream>。
(1)打开文件
从文件中写入或读出数据之前,必须先打开文件。
open()
成员函数:void open(const char* szFileName,int mode)
第一个参数是指向文件名的指针,第二个参数是文件的打开模式标记。
eg:
fstream file;
file.open("data.txt"); //不使用模式标记
fstream file;
file.open("data.txt",ios::app); //使用模式标记
模式标记
判断文件打开是否成功,可以看“对象名”这个表达式的值是否为 true,如果为 true,则表示文件打开成功。
is_open()
检查文件是否已经打开。
true 如果文件已打开并与此流对象关联。
false 除此以外。
eof()
判断文件是否为空或者是否读到文件结尾。
more
(2)读出数据
逐行读入
getline(),读取一行的数据,多用来输入字符串。
string str;
getline(infile,str)
//按行读取,遇到换行符时结束
逐个字符读入(忽略回车与空格)
file>>c;
//c即存入文件中的数据的变量,遇回车或空格则停止。
逐个字符读入(包含空格与回车)
file>>noskipws;
file>>c;
noskipws:告诉流在做词法分析时,忽略空白符或者把空白符读入作为一个空白符token。(no-skip-ws。ws,这是一个便利控制符,它只会忽略流中当前位置的一串空白。)
(3)写入数据
int c;
cin>>c;
file<<"I am happy."<<endl;
file<<c<<endl;
可输入常量或变量。如从键盘输入,需先将获取的值存入变量中。
(4)关闭文件
当 C++ 程序终止时,它会自动关闭刷新所有流,释放所有分配的内存,并关闭所有打开的文件。但程序员应该养成一个好习惯,在程序终止前关闭所有打开的文件。
参考资料:
【1】菜鸟教程,C++
【2】https://www.cnblogs.com/VVingerfly/p/4435898.html