首先区分一下 iostream 标准库,它提供了 cin 和 cout 方法分别用于从标准输入读取流和向标准输出写入流。所以涉及到键盘输入以及屏幕输出都需要添加iostream头文件。
而从文件读取流和向文件写入流。这就需要用到 C++ 中另一个标准库 fstream,它定义了三个新的数据类型:
数据类型 | 类型描述 |
---|---|
ifstream | 表示输入文件流,用于从文件读取信息。 |
ofstream | 表示输出文件流,用于创建文件并向文件写入信息。 |
fstream | 表示文件流,且同时具有 ofstream 和 ifstream 两种功能,这意味着它可以创建文件,向文件写入信息,从文件读取信息。 |
若要使用这三个数据类型的话,就必须要添加头文件fstream。
然后打开文件的方式在ios类中定义,有如下几种常见的方式:
模式 | 描述 |
---|---|
ios::out | 为输出(写)而打开文件 |
ios::in | 为输入(读)而打开文件 |
ios::app | 所有写入都追加到文件末尾 |
ios::trunc | 如果文件已存在则先删除该文件 |
首先是从文本文件里面读取字符返回数组。
#include<fstream>
#include<sstream>
using namespace std;
#include<iostream>
#include<stdlib.h>
#include<string>
string *input_str(char *filename,string str[])
{
ifstream infile;
infile.open(filename,ios::in);
if(!infile)
{
cerr<<"文件打开错误!请添加Input文件!"<<endl;
system("pause");
exit(1);
}
int i=0;
while(!infile.eof())
{
getline(infile,str[i]);//读取Input文件的每一行字符
if(str[i].empty())//若为空行,则跳过
continue;
i++;
}
infile.close();
return str;//返回的是字符数组
}
这上面的open()函数主要有两个传参,一个是文件名,一个是模式。
还有一个eof()函数,它表示的是如果读文件到达文件末尾,则返回true。
具体调用的时候就是考验你函数返回字符数组的知识了。。
string *p;
string str[1000];
p=input_str("input.txt",str);//p为指向str的指针
输出文件:
void output()
{
ofstream outfile("output.txt",ios::app);//续写,若没有output文件,则自动创建
if(!outfile)
{
cout<<"output文件打开错误!"<<endl;
exit(1);
}
outfile<<"-1"<<endl;
outfile<<"0"<<endl;
}
outfile.close();//关闭文件
}
若是想在原有文件末尾上输出的话或者输出的时候叠加输出就可用上面的代码。
当然,你也可以比较ios::app与ios::out的不同。
void output(int c)
{
ofstream outfile("output.txt",ios::out);//续写,若没有output文件,则自动创建
if(!outfile)
{
cout<<"output文件打开错误!"<<endl;
exit(1);
}
outfile<<c<<endl;
}
outfile.close();//关闭文件
}
void main()
{
int c=50;
output(c);
int a=80;
output(a);
}
结果应该是最后的output文件中只有80。
同时无论是读还是写,都有一个close()函数。
虽然当 C++ 程序终止时,它会自动关闭刷新所有流,释放所有分配的内存,并关闭所有打开的文件。但程序员应该养成一个好习惯,在程序终止前关闭所有打开的文件。