走走c++流程:输入输出流

    技术2024-10-29  51

    流的含义

    流是一种抽象的概念,可以将它理解为一条湍流不息的河流,作为传送数据的载体。数据能够存放的地方无非就是几个,从键盘刚刚输入的数据,内存的数据,磁盘文件的数据等等,这些数据互相的流向,让流这个概念产生。至此你应该懂了,他就是一个传输数据的载体。

    输入输出流

    输入输出流包含的函数特别多,例如    cin.getline()     cin.get()     太多,只说cout,cin

    c与c++的区别

        1、c语言作为入门课程,算是首选,学过c的都知道,c的输出输入为printf和scanf,最大的优点是精确,你只要够细心,你的c语言代码可以算是最优秀的语言了。     2、但是并不是所有人都那么细心,对于这些人来说,精确就成了缺点,当你用%d,来输出超其精度或者字符串数字的时候,编译系统会认为是对的(为什么编译系统不能设置一下,能够识别出来呢?这就要讲组成原理了,最后讲一下吧,这里先不讲),而运行的时候就出错了,这样很麻烦。     3、c++一边保留了c的输入输出,另一边又出了自己的输入输出cin和cout,这种输入输出流使用起来就方便了许多,不需要制定自己输入输出的是什么类型的数据,直接在cin>>后面写上输入变量名或者cout<<后写输出变量名就可以了

    C++输入输出的优势

    这样的好处挺多,不会出现不报错的错误输入输出,所以是类型安全的。c++是面向对象的,因此该输入输出流能够将对象输出,面向对象算是一个优点。在其他章节可以知道,c++可以对符号重载,当然对于>>与<<也是可以重载的,因此可以随时改变其功能,可扩展性是一个优点。其实这些优势也就是c++的优势。

    IO流

    java的io流库非常的庞大,同样,c++的流库也是非常的强大,下面我介绍一下流库

    IO流库

    iostream 输入输出流基类 istream   输出流基类 ostream  输出流基类

    fstream   输入输出文件流类 ifstream  输入文件流类 ofstream 输出文件流类

    文件输入输出流

    文件流,主要操作的就是磁盘中的文件。从上面可以看出来,很多头文件可以使用,一般来说,头文件上使用这个也就差不多够用了

    #include<fstream>

    文件打开的方式 ios::in   以输入方式打开文件 ios::out  以输出方式打开文件,若已有该文件,则清空该文件 ios::app  以输出方式打开文件,末尾添加 ios::ate  打开一个已有的文件,文件指针指向文件末尾 ios::trunc   ios::binary              以二进制方式打开文件 ios::in|ios::out        以输入输出方式打开文件,文件可读可写 ios::out|ios::binary 以二进制方式打开一个输出文件 ios::in|ios::binary   以二进制方式打开一个输入文件

    字符流

        c++中这个不是分的特别清楚,java分的很清楚,我学过java,因此自己分一下方便记忆。     字符流文件也就是内容使用的是Unicode编码的文件,简单点说,用记事本打开,你能认出来,那这就是字符流文件了。而磁盘的存储方式确是以字节为基本单位的,所以字符流文件存储是先将文件转化为字节之后,才存入磁盘的。字符流文件处理的时候,中间总是有一个Unicode转化过程,速度也就会变得慢下来了。     这种文件的读取和写入,使用ofstream outfile(“文件名”,打开方式),一般打开方式不是binary就都可。

    #include<fstream> using namespace std; int main(){ //文件内容输入 ostream outfile("我是文件.txt",ios::out); outfile<<"这是我要存入文件的内容"; //文件内容输出 ifstream infile("又是文件.txt",ios::in); //文件有很多字?那用个数组和循环吧 char a[100]; for(int i=0;i<100;i++){ infile>>a[i]; } return 0; }

    很多人发现,out居然是输入,in居然是输出,很难记忆,其实将主体当成内存就好了。当碰到字符流文件输入输出时,将主体当成内存,out从内存中输出数据,到达文件,in是从文件将数据,输入到内存,记着内存这个,也就将文件出与入记清了(上面的记法要是觉得乱,那就直接无视掉)

    字节流

    字节流文件从内存到磁盘文件是直来直往的,所以速度更加的快。当然二进制的打开方式需要使用Ios::binary。对文件的读和写,需要使用的是write和read方法

    #include<fstream> using namespace std; int main(){ ofstream outfile("又是我.dat",ios::binary); outfile.write("你好你好,我又要进去了",10);//后面那个是前面字符串的长度 char *a; istream infile("又是我.dat",ios::binary); infile.read(a,sizeof(a)); return 0; }

    文件类指针打开用完,最后必须使用close()关闭

    写一个用上以上类的程序

    /************************************************************************* > File Name: filefunction.cpp > Author:wangzhiyu12 > Mail: > Created Time: 2020年07月04日 星期六 17时12分37秒 ************************************************************************/ #include<iostream> #include<stdlib.h> #include<fstream> #include<string> using namespace std; //字符流 文件输入 void character_file_out(char filename[]){ ofstream outfile(filename,ios_base::out|ios_base::in); if(!outfile){ cerr<<"open error"<<endl; //标准错误信息输出关键字cerr exit(1); //若出错,退出 } char ch; while((ch=cin.get())!=EOF){ // cout<<ch; outfile<<ch<<" "; } } //字符流文件 读出,显示控制台 void character_file_input(char filename[]){ ifstream infile(filename,ios_base::in|ios_base::out); if(!infile){ cerr<<"open error!"<<endl; exit(1); } char ch; while(infile.get(ch)){ //一个字符一个字符的获取文件内容,并且赋给ch cout.put(ch); //输出ch } } void byte_file_out(char filename[]){ fstream outfile(filename,ios_base::binary); if(!outfile){ cerr<<"open error"; exit(1); } char *ch; while((ch=cin.get())!=EOF){ outfile<<ch<<" "; } } //字符流文件 读出,显示控制台 void character_file_input(char filename[]){ ifstream infile(filename,ios_base::in|ios_base::out); if(!infile){ cerr<<"open error!"<<endl; exit(1); } char ch; while(infile.get(ch)){ //一个字符一个字符的获取文件内容,并且赋给ch cout.put(ch); //输出ch } } void byte_file_out(char filename[]){ fstream outfile(filename,ios_base::binary); if(!outfile){ cerr<<"open error"; exit(1); } char *ch; cin.getline(ch,10,'\n'); //获取一行 outfile.write(ch,sizeof(ch)); } void byte_file_input(char filename[]){ fstream infile(filename,ios_base::binary); if(!infile){ cerr<<"open error"<<endl; exit(1); } char *ch; infile.read(ch,sizeof(ch)); cout<<ch; } int main(){ //调用函数 return 0; }

    以上程序linux中vim编写的,ios_base改为ios就可以了

    Processed: 0.010, SQL: 9