字符串在C++中是特殊的存在(很多字符串函数,用字符串比用字符数组更方便,但是也导致字符串的使用方法和其他数组不同),因此在讨论数组问题是,都会把字符串单独拉出来说。
一、非字符串的输入方法
cin>>a[i];
本语句用于将键盘输入的信息储存在a[i]中。
使用cin不需要向C语言一样需要指出数据的类型,cin会直接按照之前对数组的类型声明,将输入的数据按照声明的类型储存在数组中。
使用cin输入数字的时候,会把回车留在缓冲区,如果后面还有别的输入,留在缓冲区的回车可能会导致意外结果。
为了防止出现这种情况,cin后面跟一个接收回车字符的函数吧。具体方法看下面。
二、字符串的输入方法
1、cin.getline(储存数组名,字符个数);
运行过程:本函数可以读入一行字符(回车为函数识别结束的位置)。如果读到回车,会把回车换成'\0'储存在字符串的最后;如果读到字符个数减一还没有遇到回车符,就会在最后一个位置上存入'\0'。
举例:cin.getline(name,20);
如果已经读了19个字符还没有遇到回车,数组的最后一个元素会存入'\0',即name[19] = '\0'.
2、cin.get(数组名,字符个数);
本函数和cin.getline()非常类似,只有一个区别:cin.getline()会接受回车并把回车换成'\0';cin.get()在读到回车时会把回车留在缓冲区。
所以使用cin.get()函数,请在函数后面,再使用一个输入函数接收那个回车,否则可能会导致意想不到的后果。
cin.get()函数有个变体——不含参的cin.get();
如果cin.get()不含参数,它会只接收一个字符,因此可以用下述方法去回收那个回车:
cin.get(name,30); //将字符串存入name数组,将回车留在了缓冲区
cin.get(); //用不含参的cin.get()接收字符串后的回车
虽然cin.get()函数有些使用上的麻烦,但是cin.get()函数有个好处,就是可以利用后面紧跟着的接收回车的函数返回值判断是否输入超过了数组的元素个数。
如果接收回车的函数接收到了回车,说明没有超过数组元素个数;如果接收回车的函数接收到了别的字符,说明输入超过了元素个数。
三、数字与字符串的混合输入(小结,最保险的处理方法)
为了防止回车的干扰,建议采用如下手段输入数字和字符
输入数字时使用下面的格式
(cin>>a).get;
它等同于
cin>>a;
cin.get; //cin>>a返回值仍然是cin类型,因此后面可以直接.get,相当于cin.get
输入字符串时,使用下面格式
cin.get(目标数组名,字符个数);
cin.get();//接收回车