字符串输入方式总结(cin cin.get()cin.getline() getline())

在编程中,经常需要输入字符或者数字,而有时输出结果总是不尽人意。再此,对其做一个总结。

1.cin

(1)数字、字符  
(2)字符串

	int age;
	char name[20];
	cin >> age;
	cout << age<> name;
//	cin.getline(name,20);
	cout << name <

当字符串输入为cin>>name时,输出为:
字符串输入方式总结(cin cin.get()cin.getline() getline())_第1张图片

从输出结果可以看出,cin遇到回车则结束,实际上,cin遇到空格、回车、TAB均结束。

当字符串输入为cin.getline(name,20)时,输出为:
字符串输入方式总结(cin cin.get()cin.getline() getline())_第2张图片


从输出我们发现,name没有输入的指示。 这是因为cin在读取的过程中,遇到空格、回车、TAB结束的同时,还会把回车留在队列中,而cin.getline()遇到回车则结束。所以没有第二次输入。与此同时,也说明,cin会滤波队列中的回车、空格和TAB
为了清除队列中的空行,可以采用cin.get()来实现,具体见下一节。

2.cin.get()

(1)字符/空行

(2)字符串

	cout << "请输入字符串:";

	char a[20];
	cin.get(a,5);
	cout <

结果为:
字符串输入方式总结(cin cin.get()cin.getline() getline())_第3张图片

由输出结果可以看出cin.get()可以接收空格,并且需要把最后一个字符存'\0';当输入流中有字符时,可以直接输出流中的数据
当是当输入的字符长度较短时,输出的结果为:
字符串输入方式总结(cin cin.get()cin.getline() getline())_第4张图片
输出的第二行和第三行均为空。这是因为输入的第五个字符为\n, cin.get()在读取到\n即停止,并且把\n存在队列中,即后两行读取的都是\n,所以输出为0。和上一节一样,需要把空行读出。空行的读取方法为
cin.get();
当在两个字符串中间加入读空行语句后,输出结果如下:
字符串输入方式总结(cin cin.get()cin.getline() getline())_第5张图片
此时提示可以接着输入,输入第二行后,结果如下:
字符串输入方式总结(cin cin.get()cin.getline() getline())_第6张图片

3.cin.getline()

读取字符串:

	char a[20];

	cout << "请输入字符串:";
	cin.getline(a,5);
	cout <

当输入字符长度小于4时( 第5个用于存储'\0'),输出结果如下:
字符串输入方式总结(cin cin.get()cin.getline() getline())_第7张图片
当输入的字符长度大于4个时,输入结果如下:
字符串输入方式总结(cin cin.get()cin.getline() getline())_第8张图片
由输出结果可以看出, cin.getline()接收空格,但是第二行没有提示输入就直接结束。这是因为 cin.getline()会把剩余的字符留在队列中,并且设置失效位,并关闭输入。为此,需要清楚失效位,其具体程序如下:
	char a[20];

	cout << "请输入字符串:";
	cin.getline(a,5);
	cout <	if(!cin)
	{
		cin.clear();
		while(cin.get() != '\n')
		{
			continue;
		}
	}

	cout << "请输入字符串:";
	cin.getline(a,5);
	cout <

上述通过 判断cin的的失效位,对失效位进行清理,并且把输入流中的字符读出。其输出结果为:
字符串输入方式总结(cin cin.get()cin.getline() getline())_第9张图片

当不需要清楚输入流中的字符时,只需要cin.clear()。则第二行输出为输入流中留下的字符。

字符串输入方式总结(cin cin.get()cin.getline() getline())_第10张图片

4.getline()

字符串

	string str;
	getline(cin,str);
	cout << str<
其输出为:
字符串输入方式总结(cin cin.get()cin.getline() getline())_第11张图片

由结果可以看出, getline可以读入空格,并且可以读任意长度的字符串。但是需要说明的是,getline在头文件string中,其要求对象为string类型。

5.getchar()

用于读入字符,为了便于分析其特点,程序如下:

	char a[20];
	char ch;

	cout << "请输入字符串:";
	cin.get(a,5);
	cout <
其输出结果如下:
字符串输入方式总结(cin cin.get()cin.getline() getline())_第12张图片

从结果分析,第一次输入后输入流中存在\n,而第二行输入空格,说明 getchar()可以接受空格。其可以取代cin.get()来读取空行

你可能感兴趣的:(C++基础)