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()有很多时候的环境配置下无法使用,就不再做更多讨论。

发布了38 篇原创文章 · 获赞 1 · 访问量 863
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览