写在未了解string class之前:
cin:
接收一个输入的一个字符或者字符串,遇“空白字符”停止(例如:空格, 回车,TAB, 回车)
cin.get(name, size):
接收一个输入的一个字符或者字符串,遇“回车符”停止,但是接收除“回车符”之外的空白字符(例如:空格, 回车,TAB)。需要注意的是它会将“回车符”留在缓存队列中,不能连续两个cin.get(name, size),否则第二个cin.get(name, size)将会直接读入第一个cin.get(name, size)留下的回车符而导致无效。最好的方式是cin.get(name, size)之后紧跟一个cin.get(),将回车符读取,不影响后面的cin.get(name, size)。
1. 连续两个cin.get(name, size),有问题
cin.get(name, ArSize);
cin.get(dessert, Arsize); // a problem
2. 改为下面的程序则没有问题:
cin.get(name, ArSize); // read first line
cin.get(); // read newline
cin.get(dessert, Arsize); // read second line
cin.getline(name, size):
作用同cin.get(name, size),但是cin.getline(name, size)会将“回车符”摒弃,自动换成\0'。
写在了解C++ string class之后:
1. getline(cin, str)与cin.getline(name,size)相比发现,有了class概念之后cin成了一个参数,并且没有长度规格。
char a[20]; ----array;
string b; ----class,定义一个名字为“b”的字符串;
strlen(charr) -----charr的长度;
b.size() -----字符串b的长度;
下面引用C++ primer plus 的例子(此程序是有bug的,当输入字符超过charr 20位长度之后,第二个getline将会无输入、无输出);
#include <iostream>
#include <string> // make string class available
#include <cstring> // C-style string library
int main()
{
using namespace std;
char charr[20];
string str;
cout << “Length of string in charr before input: “ << strlen(charr) << endl;
cout << “Length of string in str before input: “ << str.size() << endl;
cout << “Enter a line of text:\n”;
cin.getline(charr, 20); // indicate maximum length
cout << “You entered: “ << charr << endl;
cout << “Enter another line of text:\n”;
getline(cin, str); // cin now an argument; no length specifier
cout << “You entered: “ << str << endl;
cout << “Length of string in charr after input: “ << strlen(charr) << endl;
cout << “Length of string in str after input: “ << str.size() << endl;
return 0;
}
运行结果一:输入少于20个字符,程序运行如下:
Length of string in charr before input: 5
Length of string in str before input: 0
Enter a line of text:
ljlkjl
You entered: ljlkjl
Enter another line of text:
lkjlkj
You entered: lkjlkj
Length of string in charr after input: 6
Length of string in str after input: 6
运行结果二:输入超过20个字符,程序运行如下;
Length of string in charr before input: 5
Length of string in str before input: 0
Enter a line of text:
kjlakjdkfjlajdklafjlsdkflajdfkjaskflasjdfljalkdjkajsdfkjakd
You entered: kjlakjdkfjlajdklafj
Enter another line of text: -----not able to input any char
You entered: -----
Length of string in charr after input: 19
Length of string in str after input: 0