c++中输入字符串--cin.get和cin.getline用法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ZLK961543260/article/details/78297871

c++中cin输入字符串,这个跟java中的scanner对象有点像,今天来说一说cin中get()和getline()用法。首先先说一下两者的区别:

1、getline()在输入结束后丢弃换行符,在存储字符串时用空字符来替换换行符,也就是‘\0’。而get()将换行符保留在输入队列中。

2、getline()里面必须包含两个参数,数组名和长度。而get()参数可以为空,参数为空时,读取一个字符。也可以有两个和getline()一样的参数。

看一段程序:


	const int size = 20;
	char a[size],b[size];
	cin.getline(a,size);		//输入a
	cout<<a<<endl;
	cin.getline(b,size);		//输入b
	cout<<b<<endl;
	cin.get(a,size);			//输入a
	cout<<a<<endl;
	cin.get(b,size).get();	  //这行cin取到的是回车键,也就是换行符
	cout<<b<<endl;
	system("pause");			//保证程序执行结束后不会闪退
	return 0;


我们输入和输出的结果是:




程序解读:定义两个char型的数组,我们都知道char数组可以存储字符串。在程序中用cin.getline(a,size)来向数组a中写数据,输入ab s,然后打印。这个没什么说的,注意的就是getline中的参数,第一个是数组的名,第二个是允许读入的字符串的长度。下面输入b,跟这个一样。


在后面我们用get()向数组中写数据就会出现问题。在调用cin.get(a,size)后,屏幕录入数据af d,然后回车。我们发现cin.get(b,size).get(),这行并没有执行。原因:由于在调用cin.get(a,size)之后我们要输入一个回车,在调用cin.get(b,size).get()时,系统默认将回车看做他的输入,因此直接调用了cout<<b<<endl;输出b。最后system("pause")是保证程序运行结束后不会闪退。


这里说一下cin.get(b,size).get()这句话。cin.get(b,size)结束后返回一个cin的对象,用这个对象在调用get()方法,能够处理回车键的麻烦。其实这条语句可以用两条语句来解释:

cin.get(b,size);

cin.get();

这样做的效果是一样的。只是将输入结束后的回车键另做处理。


这里在额外的说一下java中的scanner,如果定义一个scanner对象,例如

		Scanner sc = new Scanner(System.in);
		int a  = sc.nextInt();
		String s = sc.nextLine();
		System.out.println(a + s);

程序输入4然后回车会直接输出4。这个跟c++中的是一个道理,程序把输入4后的回车当成了一个字符串。


猜你喜欢

转载自blog.csdn.net/ZLK961543260/article/details/78297871