输入输出流

文件IO和标准输入输出

  • 键盘输入输出叫标准输入输出
  • 文件的输入输出叫文件I/O
  • 一般过程是键盘输入到输入缓冲区,到程序到输出缓冲区,输出缓冲区到显示器

缓冲区

  • 输入缓冲区,本质上就是一块内存,键盘输入到这块内存
  • 输出缓冲区,程序输出到缓冲区,缓冲区输出到显示器显示,endl会输出换行并且立即刷新缓冲区,代码cout<<“hello world”;在Linux下不会输出,必须加endl才会输出
  • <iostream>中cerr没有缓冲区直接输出到显示器,clog有缓冲区,通过缓冲区输出到显示器

标准输入流

  • cin.get(),回车结束,可以读字符也可以读字符串,读字符串时包括\n
  • cin.getline(),读一行,不读入换行符’\n’,就是所谓的读一行数据
  • cin.ignore,忽略该字符,即从缓冲区拿走字符或者字符串
  • cin.peek,偷窥缓冲区,获取里面数据但不拿走数据
  • cin.putback(),放回缓冲区

代码示例

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;

void test01()
{
	//char ch;
	//while ((ch=cin.get())!=EOF)//读入字符包括\n
	//{
	//	cout << ch << endl;
	//}
	//cin.get
	//char ch2;
	//cin.get(ch2);//读一个字符
	char buf[256] = { 0 };
	//cin.get(buf, 256);//从缓冲区读一个字符串,包括\n
	//cin.getline(buf, 256);//读一行数据,不会读入\n
	cout << buf << endl;
}

void test02()
{
	char ch;
	cin.get(ch);//从缓冲区要数据,没有就阻塞
	cout << ch << endl;
	cin.ignore();//忽略该字符,从缓冲区拿走
	cin.ignore(10,'\n');//忽略十个字符,直至遇到\n
	cin.get(ch);
	cout << ch << endl;
}

//cin.peek应用
void test03()
{
	cout << "请输入数字或者字符串" << endl;
	char ch;
	ch = cin.peek();
	if (ch >= '0' && ch <= '9')
	{
		int number;
		cin >> number;
		cout << "您输入的是数字" << number << endl;
	}
	else
	{
		char buf[256] = { 0 };
		cin.get(buf, 256);
		cout << "您输入的是字符串" << buf << endl;
	}
}

//cin.putback放回缓冲区
void test04()
{
	cout << "请输入字符串或者数字" << endl;
	char ch;
	cin.get(ch);
	if (ch >= '0' && ch <= '9')
	{
		cin.putback(ch);
		int number;
		cin >> number;
		cout << "您输入的数字是" << number << endl;
	}
	else
	{
		cin.putback(ch);
		char buf[256] = { 0 };
		cin >> buf;
		cout << buf << endl;
	}
}

int main(void)
{
	//test01();
	//test02();
	//test03();
	test04();
	return 0;
}

标准输出流

  • cout.flush()刷新缓冲区
  • cout.put()输出一个字符
  • cout.write(“写一个字符串”,size),写一个字符串
  • cout.unsetf和cout.setf格式化输出

代码示例

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<iomanip>
using namespace std;

void test01()
{
	cout << "hello world" << endl;
	cout.put('h').put('e').put('l') << endl;
	//cout.write("写一个字符串", strlen("写一个字符串"));
}

//格式化输出
void test02()
{
	//通过格式化成员方法
	//十进制变成八进制
	int number = 100;
	cout.unsetf(ios::dec);//卸载十进制输出
	cout << number << endl;
	cout.setf(ios::oct);//设置八进制输出
	//cout.setf(ios::showbase);//设置显示输出格式
	cout.width(10);//留十个字符位置
	cout.fill('*');//多余位置用*填充,不够会自动补充
	cout.setf(ios::left);//默认是右对齐,这里设置左对齐
	cout << number << endl;

	//通过控制符
	int number2 = 100;
	cout << oct
		//<< setiosflags(ios::showbase)
		<< setw(10)
		<< setfill('*')
		<< setiosflags(ios::left)
		<< number2
		<< endl;
}

int main(void)
{
	//test01();
	test02();

	system("pause");
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr_Csyn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值