從標准輸入讀取一行字符串的方法
1 getline讀取一行
C++中定義了一個在std名字空間的全局函數getline,因為這個getline函數的參數使用了string字符串,所以聲明在了< string>頭文件中了。
getline利用cin可以從標准輸入設備鍵盤讀取一行,當遇到如下三種情況會結束讀操作:1)到文件結束,2)遇到函數的定界符,3)輸入達到最大限度。
函數原型有兩個重載形式:
istream& getline ( istream& is, string& str);//默認以換行符結束
istream& getline ( istream& is, string& str, char delim);
使用示例:
#include <string>
#include <iostream>
using namespace std;
int main()
{
string str;
getline(cin,str);
cout<<str<<endl;
system("pause");
return 0;
}
輸入:hello world[回車],輸出:
注意,getline遇到結束符時,會將結束符一並讀入指定的string中,再將結束符替換為空字符。因此,進行從鍵盤讀取一行字符時,建議使用getline,較為安全。但是,最好還是要進行標准輸入的安全檢查,提高程序容錯能力。
cin.getline()類似,但是cin.getline()屬於istream流,而getline()屬於string流,是不一樣的兩個函數。
5.2 gets讀取一行
gets是C中的庫函數,在< stdio.h>申明,從標准輸入設備讀字符串,可以無限讀取,不會判斷上限,以回車結束或者EOF時停止讀取,所以程序員應該確保buffer的空間足夠大,以便在執行讀操作時不發生溢出。
函數原型:char *gets( char *buffer );
使用示例:
#include <iostream>
using namespace std;
int main()
{
char array[20]={NULL};
gets(array);
cout<<array<<endl;
system("pause");
return 0;
}
輸入:I am lvlv[回車],輸出:
由於該函數是C的庫函數,所以不建議使用,既然是C++程序,就盡量使用C++的庫函數吧