C++语言入门(九) 文件

(一)流 

一.流

定义:数据从一个对象到另一个对象的传输。

功能:标准输入输出+文件处理

分类:

  • 文本流         一串ASCII字符
  • 二进制流      一串二进制 

二.流类型

1.标准I/O流

  • ios是抽象类
  • ostreamcout,clog,cerr的类
  • istreamcin的类 

2.文件流类型

  • ifstream从文件读取数据 
  • ofstream向文件写入数据
  • iofstream文件读写数据

3.字符串流类型 

  • istringstreamstring读取数据 
  • ostringstreamstring写入数据
  • iostringstream读写string数据

三.流对象 

通常标准I/O流对象是全局对象不需要定义,而文件流对象和字符串流对象需要用户定义。 

标准I/O流对象有以下四个:

NO.全局流对象名称缓存
1cout标准输出流带缓存
2cin标准输入流带缓存
3clog标准日志流带缓存
4cerr标准错误流无缓存

 流对象通常都不能复制。

四.流对象状态 

流对象状态在某一个时刻必定处于以下四个状态之一。 

NO.状态含义
1good()前一个流操作成功
2eof()到输入尾/文件尾
3fail()发生意外事情(读取失败)
4bad()发生意外严重事情(磁盘读取失败)

 五.I/O操作

I/O操作主要有如下五种:

  • 输入操作:in >> x或者getline(in,s)
  • 输出操作:out << x
  • 操作符
  • 流状态
  • 格式化

 输出流默认设置

类型进制宽度对齐填充精度
整数十进制0右对齐空格1
实数十进制0右对齐空格6位数
字符串-0右对齐空格字符串实际长度

流的输出控制格式

1.对齐方式

flag(成员函数)manipulator(操作子)作用
ios::left left居左
ios::right right居右
ios::internalinternal 输出符号或进制后填充 

2.宽度设置 (不能持续)

flag(成员函数)manipulator(操作子)
width()setw()  头文件iomanip
#include <iostream>
using namespace std;
int main(){
    //成员函数
    int n = -11;
    cout.width(6);
    cout.flags(ios::right);
    cout << n << endl;

    //操作子
    int m = -21;
    cout << setw(7) << right << m << endl;

    //混合
    cout.width(5); cout << right << m << endl;
}

3.整数输出格式

flag(成员函数)manipulator(操作子)作用
ios::decdec十进制
ios::octoct八进制
ios::hexhex十六进制
ios::uppercaseuppercase使用大写输出十六进制
ios::showbaseshowbase输出带有进制的字符
#include <iostream>
using namespace std;
int main(){
    //成员函数:
    int n = 11;
    cout.flags(ios::showbase|ios::oct);
    cout << n << endl;

    //操作子:
    int m = 11;
    cout << showbase << oct << m << endl;
}

输出: 013
            013

4.浮点数输出格式

默认最多保留多少位数字 (浮点数格式)

//成员函数:
cout.precision(5);
cout << a << endl;
//操作子:
cout << setprecision(5)
     << a << endl;

 ②小数点后最多保留多少位(定点数方式)

#include <iomanip>

//成员函数:
cout.flags(ios::fixed);
cout << a << endl;
//操作子:
cout << fixed << a << endl;

 ③科学计数法输出浮点数

//成员函数:
cout.flags(ios::scientific);
cout << a << endl;
//操作子:
cout << scientific << a << endl;

5.布尔类型

bool a = true;
//输出:1
cout << a << endl;

//输出:true
cout << boolalpha << a << endl; //操作子

cout.flags(ios::boolalpha); //成员函数
cout << a << endl; 

6.其他类型

showpos输出十进制0或者整数时,带+-号

int a = 100;
int b = -1;
//操作子:
cout << showpos << a << b << endl;
//成员函数:
cout.setf(ios::showpos);
cout << a << b << endl;

输出:+100-1

 复数虚部a+bi使用showpos非常合适。

(二)字符串流

要用头文件:#include<sstream>

自己定义流对象 ,使用string对象来代替字符数组,这样可以避免缓冲区溢出的危险。而且,传入参数和目标对象的类型被自动推导出来,即便使用了不正确的格式化符也没有危险。

#include <iostream>  
#include <sstream>
using namespace std;
int main () {
	ostringstream oss; //定义输出字符串 
	oss << 123 << "abc" << 3.1415 << endl;//上面流的也可以用 
	string s = oss.str(); //把它定义到字符串
	cout << s; 
	
	istringstream iss("123 abc 3.14");//定义输入字符串 
	int n;
	string str;
	float f;
	iss >> n >> str >> f;
	cout << n << str << f << endl;
}

(三)文件操作

读写:

#include <iostream> 
#include <fstream>
#include <string>
using namespace std;
int main () {
	string s;
	cin >> s;//输出到文件中
	
	ofstream of("./test",ios::app);//输出的文件路径  app是追加 
	if(of){ //判断文件是否打开 
		of << s;
		of.close();//提前关掉 
	}
	
	ifstream ifs("./test");//输入 
	string t;
	if(ifs){
		ifs >> t;
		ifs.close();
	}
	cout << t << endl;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值