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

流的含义

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

输入输出流

输入输出流包含的函数特别多,例如    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就可以了

猜你喜欢

转载自blog.csdn.net/wangzhiyu12/article/details/107117163