【STL】C++标准输入输出流

输入和输出相对于程序而说的。
键盘输入数据到程序:标准输入 input;
程序数据输出到显示器:标准输出 output。
标准输入+标准输出=标准I/O;
文件的输入和输出叫文件I/O;
cout: 全局流对象,输出数据到显示器(输出缓冲区);
cin: 从缓冲区读取数据(输入缓冲区)
cerr: 标准错误 输出数据到显示器;
clog: 标准日志 输出数据到显示器;
cerr没有缓冲区,clog有缓冲区。

Cout<<”hello world”<<endl;
Cout 把hello world放进输出缓冲区,但是并不会输出显示。Endl首先进行一次换行,然后对缓冲区进行刷新,使数据输出显示。

(1)标准输入流对象cin,重点掌握的函数:
Cin.get() //一次只能读取一个字符
Cin.get(一个参数)//读取一个字符
Cin.get(两个参数)//可以读取字符串
Cin.ignore()//忽略当前的字符 括号里面加几就是几个字符,无参数默认为1。举例
Cin.peek()//偷窥一下缓冲区,返回第一个字符,并不像get一样是将其取走。
Cin.putback()和cin.get()配合使用:cin.get()将缓冲区的数据拿走,cin.putback()将get拿走的数据再放回去。
////////////////////////////////////////////////////////////////////////////
Char ch;
Cin.get(ch);
Cin.ignore();
当输入abcd时,输出:a c;
首先a进入缓冲区,那么当前字符就是b,然后c 进入缓冲区,当前字符是d———因此输出为a c.
//////////////////////////////////////////////////////////////////////////////
Char ch2;
Cin.get(ch2);//读取一个字符
Char buf[256]={0};
Cin.get(buf,256);//从缓冲区读取一个字符串
Cin.getline(buf,256);//读取一行数据,不读换行符
//////////////////////////////////////////////////////////////////////////////////

(2)C++标准输出流:


```cpp
#include<iostream>
#include<iomanip>
using namespace std;
/*
cout.flush()//刷新缓冲区
cout.put()//向缓冲区写字符
cout.write()//二进制流的输出
cout.width()//输出格式控制
cout.fill()
cout.setf(标记)

*/
void test() {
//一 成员方法的方式
	/////////////////////////只写cout只会将数据放入缓冲区,并不会刷新输出,当加入cout.flush()就会输出。////
	///注:在VS的不同版本可能不加endl和cout.flush依然会有输出。
	cout << "hello world";
	cout.flush();
	////////////////////////cout.put向缓冲区中写字符,支持链式输入///////////////////////////////////////
	cout << endl;
	cout.put('h').put('e').put('l').put('l').put('o') << endl;
	///////////////////cout.write()写字符串///////
	cout.write("hello zhaosi!",strlen("hello zhaosi!"))<<endl;

//重要///////////////**************cout.width()//输出格式控制**********************/////////////////
	int number = 10;
	cout << number << endl;
	cout.unsetf(ios::dec);//卸载当前默认的十进制输出方式
	cout.setf(ios::oct);//将当前输出改为八进制输出方式
	cout << number << endl;
	cout.setf(ios::showbase);//将八进制的0显现出来
	cout << number << endl;

////////////////////cout.width()//输出格式控制//////////
	cout.width(10);//设置位宽
	cout.fill('*');//空格处用*代替
	cout.setf(ios::left);//格式左对齐
	cout << number << endl;
/*************************************************************************************************/
//二 通过控制符
	int number2 = 10;
	cout << hex
		<< setiosflags(ios::showbase)
		<< setw(10)
		<< setfill('~')
		<<setiosflags(ios::left )
		<< number2
		<< endl;




}
int main(void) {
	test();
	return 0;

}
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191029195531368.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTc0Nzg5Mw==,size_16,color_FFFFFF,t_70)
发布了57 篇原创文章 · 获赞 28 · 访问量 4135

猜你喜欢

转载自blog.csdn.net/weixin_41747893/article/details/102807277