寫在未了解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