cin,cin.get,cin.getline的区别

1.cin

#include <iostream>
using namespace std;
int main()
{
	char a[3];
	char b[3];
	cin>>a;
	cout<<a<<endl;
	cin>>b;
	cout<<b<<endl;
	return 0;
}


输入:ab空格cd
结果:
cin,cin.get,cin.getline的区别_第1张图片
输入:ab“tab键”cd
结果:
cin,cin.get,cin.getline的区别_第2张图片
从上面的程序可以得出两点结论:
a.输入结束标志Enter ,字符结束标志Space、Tab键,并且这三个都不回显。
b.跳过第二次输入的原因:cin是从输入缓冲区中取得数据,当ab输入中断后,cd还残留在缓冲区中。运行到第二个cin时,cin从缓冲区中取得残留数据cd,所以跳过了第二次输入。

2.cin.get(行输入)

cin.get有三个版本
a. cin.get()接受两个参数:数组名(char* 类型地址)和整数。
b.cin.get()不包含任何参数,Space、Tab键 和回车都能回显。可以有如下格式:cin.get();或者a=cin.get();
c.cin.get()只包含一个char类型,Space、Tab键 和回车都能回显,手动输入或者把输入列队中的一个字符付给这个char类型。
例:书本p153,程序清单5.17
程序:
#include <iostream>
using namespace std;
int main()
{
	char a[4];char b[4];
	cin.get(a,4);
	cin.get(b,4);
	cout<<a<<endl;
	cout<<b<<endl;
	return 0;
}
输入a空格b显示一下:
cin,cin.get,cin.getline的区别_第3张图片
结论:
a.Space、Tab键都会进行都被当做一个字符,进行回显.输入结束标志是Enter。字符串结束标志是 :后面的整数部分(只能输入3个)。
b.第二输入又跳过了,是因为cin再输入后会把换行符保留在输入缓冲区,又因为cin.get 是行输入,当遇到换行符默认输入完毕,所以跳过。

解决办法:使用cin.get(),cin.get()作用是将输入缓冲区中的下一个字符输入。即把换号符提前取出,下一个cin.get就不会出问题。程序如下:
#include <iostream>
using namespace std;
int main()
{
	char a[4];char b[4];
	cin.get(a,4);<span style="white-space:pre">	</span>    //这两句可以并为cin.get(a,4).get();
	cin.get();
	cin.get(b,4);
	cout<<a<<endl;
	cout<<b<<endl;
	return 0;
}
运行结果:
cin,cin.get,cin.getline的区别_第4张图片

3.cin.getline(行输入)

cin.getline 使用方法和cin.get的第一个版本的用法类似。但读取空行或超过输入字符超过指定书目时会设置失效位,阻断后面的输入。
使用 cin.clear();恢复输入。
如下两个程序则可说明:
程序1:
#include <iostream>
using namespace std;
int main()
{
	char a[4];
	cin.getline(a,4);
	cin.clear();
	char b;
	cin>>b;
	cout<<a<<endl;
	cout<<b<<endl;
	return 0;
}
程序2:
#include <iostream>
using namespace std;
int main()
{
	char a[4];
	cin.getline(a,4);
	//cin.clear();
	char b;
	cin>>b;
	cout<<a<<endl;
	cout<<b<<endl;
	return 0;
}
都输入asdf的到的结果是不一样的
结果1:
cin,cin.get,cin.getline的区别_第5张图片
结果2:
cin,cin.get,cin.getline的区别_第6张图片
作者QQ:2415180498 有错误联系我,交流交流,共同进步。

你可能感兴趣的:(cin,cin.getline,cin.get)