cin输入流的操作

cin输入流的操作


一.cin流

  • test1
void test1() {
	char str1[20], str2[20];
	cin >> str1 >> str2;
	cout << "str1:" << str1 << ",str2:" << str2 << endl;
}

在这里插入图片描述

  • test2
void test2() {
	char ch1, ch2;
	cin >> ch1 >> ch2;
	cout << "ch1;" << ch1 << ",ch2:" << ch2 << endl;
	
}

在这里插入图片描述

  • test3
void test3() {
	char str1[20], str2[20];
	cin >> str1 >> str2;
	cout << "str1:" << str1 << ",str2:" << str2 << endl;

	char ch1, ch2;
	cin >> ch1 >> ch2;
	cout << "ch1;" << ch1 << ",ch2:" << ch2 << endl;
}

在这里插入图片描述
cin流总结:
由上面三个程序可以看出, cin流可以直接过滤掉 空白部分(换行符,制表符,空格)再进行流输入

二.get

  • 官方文档中get用法
  int get();
  istream &get( char &ch );
  istream &get( char *buffer, streamsize num );
  istream &get( char *buffer, streamsize num, char delim );
  istream &get( streambuf &buffer );
  istream &get( streambuf &buffer, char delim );

说明:
1.返回类型是 istream& , 说明必须使用 cin.get() 形式,这样才能返回 istream&类型
2.使用get读取 num-1 个字符到 buffer 中,相当于一个字符一个字符的读取,途中如果遇到 EOF、delim时停止。

  • test
void test() {
	char str1[20], str2[20];
	cin >> str1 >> str2;
	cout << "str1:" << str1 << ",str2:" << str2 << endl;

	char ch1, ch2;
	cin.get(ch1);//这里会读取遗留在缓冲区中的回车,也就是换行符,换行符在ASCII表中的数值是10
	cin.get(ch2);
	cout << "ch1(强转为int):" << (int)ch1 << ",ch2(强转为int):" << (int)ch2 << endl;
	
}

在这里插入图片描述
注意此处ch1读取遗留在缓冲区中的回车,也就是换行符,换行符在ASCII表中的数值是10,原因是之前cin输入流遗留了一个回车在缓冲区。


istream &get( char *buffer, streamsize num, char delim );
此时,停止向缓冲区读取的情况有三种:

1.已经读了9个字符, 但是需要注意缓冲区中仍然存留着字符
2.读到’d’ 字符,但是需要注意缓冲区中仍然存留着字符
3.读到EOF(一般在文件中才会出现)

  • 情况一
void test1() {
	
	char buffer[20];
	cin.get(buffer, 10, 'd');
	cout << "buffer:" << buffer << endl;
	char ch;
	cin.get(ch);
	cout << "ch:" << ch << endl;
}

在这里插入图片描述

  • 情况二

在这里插入图片描述

三.getline

  • getline的官方文档

  istream &getline( char *buffer, streamsize num );
  istream &getline( char *buffer, streamsize num, char delim );
 

与get用法类似,但是不同的一点就是getline在遇到换行符时会终止,并把’\n’自动转化为’\0’,加入到buffer中,如test1所示:

  • test1
void test1() {
	char buffer[20];
	cin.getline(buffer, 20);
	cout << "buffer:" << buffer << endl;
	cout << "buffer[4]:" << (int)buffer[4] << endl;
	
	char ch;
	cin.get(ch);
	cout << "ch:" << ch << endl;

}

输入:
a[空格]b[制表符]c
输出:
在这里插入图片描述

四 ignore和sync

如果缓存区中还有未输出的字符,影响接下来的输入,那么则需要进行清空缓存区。
1. ignore

  • 官方文档
 istream &ignore( streamsize num=1, int delim=EOF );
void test() {
	char ch1, ch2;
	cin.get(ch1);
	cin.ignore();
	cin.get(ch2);
	cout << "ch1:" << ch1 << ",ch2:" << ch2 << endl;
}

2.sync
关于cin.sync()有很多时候的环境配置下无法使用,就不再做更多讨论。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值