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后的回车当成了一个字符串。