天天看点

C++标准输入流对象cin需重点掌握的函数

C++标准输入流对象cin需重点掌握的函数

    • 1. cin.get()
    • 2. cin.getline()
    • 3. cin.ignore()
    • 4. cin.peek()
    • 5. cin.putback()

1. cin.get()

cin.get()

一次只能从缓冲区拿走一个字符

void test01(){
	// 输入as   缓冲区中  a  s  换行    第一个拿  a  第二个 拿 s  第三次拿换行 第四次等待下次输入
	char c = cin.get();
	cout << "c = " << c << endl;

	c = cin.get();
	cout << "c = " << c << endl;

	c = cin.get();
	cout << "c = " << c << endl;

	c = cin.get();
	cout << "c = " << c << endl;
}
           

运行结果:

C++标准输入流对象cin需重点掌握的函数

cin.get(两个参数)

可以拿取字符串,不会把换行符拿走,遗留在缓冲区中

void test02(){
	//cin.get(两个参数) //可以读字符串
	char buf[1024];
	cin.get(buf, 1024);

	char c = cin.get();

	if (c == '\n'){
		cout << "换行还在缓冲区" << endl;
	}
	else{
		cout << "换行不在缓冲区" << endl;
	}
	cout << buf << endl;
}
//cin.get(两个参数)读取字符串时,不会把换行符拿走,遗留在缓冲区中
           

运行结果:

C++标准输入流对象cin需重点掌握的函数

2. cin.getline()

语法:

cin.getline(字符指针(char*),字符个数N(int),结束符(char));

  此函数会一次读取多个字符(包括空白字符)。它以指定的地址为存放第一个读取的字符的位置,依次向后存放读取的字符,直到读满N-1个,或者遇到指定的结束符为止。若不指定结束符,则默认结束符为换行符,此函数并不保留结束符,它通过结束符确定结束,但不保存结束符,它用空字符来替换结束符。

void test03(){
	char buf[1024];
	cin.getline(buf, 1024);
	char c = cin.get();//如果把换行符也读取了,缓冲区没有数据,此行代码会阻塞,等待输入
	if (c == '\n'){
		cout << "换行还在缓冲区" << endl;
	}
	else{
		cout << "换行不在缓冲区" << endl;
	}
	//cin.getline 把换行符读取,并且扔掉
}
           

运行结果:

C++标准输入流对象cin需重点掌握的函数

3. cin.ignore()

cin.ignore();

没有参数 代表忽略一个字符 ,带参数N,代表忽略N个字符

void test04(){
	cin.ignore(2); //没有参数 代表忽略一个字符 ,带参数N,代表忽略N个字符
    char buf[1024];
	cin.getline(buf,1024);
	cout << "buf = " << buf << endl;
}
           
C++标准输入流对象cin需重点掌握的函数

4. cin.peek()

cin.peek()

获取一下第一个字符,然后再放回缓冲区

void test05(){
	//输入as  偷看一眼 a,然后再放回缓冲区 缓冲区中还是as
	char c = cin.peek();
	cout << "c = " << c << endl;
	c = cin.get();
	cout << "c = " << c << endl;
}
           

运行结果:

C++标准输入流对象cin需重点掌握的函数

5. cin.putback()

cin.putback()

将字符放回到输入流中

void test06(){
	char c = cin.get();
	cin.putback(c);

	char buf[1024];

	cin.getline(buf,1024);
	cout << buf << endl;
}
           

运行结果:

C++标准输入流对象cin需重点掌握的函数