STL:C++输入输出流、缓冲区

STL:C++输入输出流、缓冲区,第1张

STL:C++输入输出流、缓冲区 一.输入输出流
  1. 键盘输入数据到程序——标准输入input(cin);
  2. 程序数据输出到显示器——标准输出output(cout);
  3. 标准输入+标准输出=标准I/O
  4. 文件的输入和输出——文件I/O。
cout;//标准输出—输出数据到显示器
cin;//标准输入—输出数据到显示器
cerr;//标准错误—输出数据到显示器
clog;//标准日志—输出数据到显示器

cerr和clog区别:cerr没有缓冲区,clog有缓冲区。

二.缓冲区

三.标准输入流

标准输入流cin,重点掌握函数,如下:

cin.get();//一次只能读取一个字符
cin.get(一个参数);//读取一个字符
cin.get(两个参数);//可以读字符串
cin.getline();//读取一行数据
cin.ignore(n);//忽略n个字符
cin.peek();//查看缓存中第一个字符
cin.putback();//给缓存中放数据

get()和peek()区别:
get()取出缓存区中的数据
peek()查看缓存区的第一个字符,不会取走;

1.测试:cin.get()
将数据从缓冲区拿走。
如果缓冲区没有数据,会发生阻塞,等待用户输入数据,然后再从缓冲区拿走。

void test01() {
	char ch;
	//cin.get()会从缓冲区拿取数据
	//EOF是键盘输入结束标志,Ctrl+Z结束
	while ((ch=cin.get())!=EOF)
	{
		cout << ch << endl;
	}
}

结果:

2.测试:cin.get(一个参数)

char ch1;
cin.get(ch1);//读取一个字符
cout << ch1;

结果:

3.测试:cin.get(两个参数)
从缓冲区读取一个字符串

char buf[256] = { 0 };
cin.get(buf, 256);//从缓冲区读取一个字符串

4.测试:cin.getline()
读取一行数据

char buf[256] = { 0 };
cin.getline(buf, 256);//读取一行数据

5.测试:cin.ignore()

  • cin.ignore() 忽略一个字符;
  • cin.ignore(n) 忽略n个字符;
  • cin.ignore(n,’n’) 忽略n个字符,但遇到回车结束;
char ch;
cin.get(ch);
cout << "输出ch=" << ch << endl;
cin.ignore();//忽略一个字符
cin.get(ch);
cout << "输出ch=" << ch << endl;

结果:

修改:

cin.ignore(2);//忽略两个字符


6.测试cin.peek()
偷窥一下缓冲区,返回第一个字符,不是取走!!!字符还在缓冲区。
案例1:

char ch;
ch = cin.peek();//偷窥一下缓冲区,返回第一个字符
cout << ch << endl;

结果:

案例2:(好好看!!!)

void test04() {
	char ch;
	ch = cin.peek();//偷窥一下缓冲区,返回第一个字符
	if (ch >= '0' && ch <= '9') {
		int number;
		cin >> number;//cin将缓冲区数据给number
		cout << "你输入的是数字:" << number << endl;
	}
	else {
		char buf[1024] = { 0 };
		cin >> buf;
		cout << "你输入的是字符串:" << buf << endl;
	}
}

结果:

6.测试:cin.putback()
与cin.get()对应,将从缓冲区拿走的数据,再放回缓冲区。

	char ch;
	cin.get(ch);//从缓冲区取走一个字符
	cout << "缓冲区第一位是:" << (char)cin.peek() << endl;
	if (ch >= '0' && ch <= '9') {
		cin.putback(ch);
		int number;
		cin >> number;
		cout << "输入的是数字:"<> buf;
		cout << "输入的字符串是:" << buf << endl;
	}

结果:

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5698294.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存