cin cin.get cin.getlin
cin:遇到空格,回車或者製表符就會結束輸入,這樣就導致了我們不能輸入一個帶有空格的字串。
cin.get(),cin.getline() :但是,很好,C++的這兩個函式幫我們解決了這一問題,它們都表示每次讀取一行字串輸入。
不過,這兩個函式也有一些區別:
cin.getline()和cin.get()。這兩個函式都讀取一行輸入,直到達到換行符。然而,隨後cin.getline()將丟棄換行符,而cin.get()將換行符保留在輸入序列中。
1.面向行的輸入:getline()
MSDN中的用法:
istream::getline
istream& getline( char* pch, int nCount, chardelim= '\n' );
istream& getline( unsigned char* puch, int nCount, char delim = '\n' );
istream& getline( signed char* psch, int nCount, char delim = '\n' );
getline()函式讀取整行,它使用通過回車鍵輸入的換行符來確定輸入結尾。要呼叫這種方法,可以使用cin.getline()。該函式有兩個引數。第一個引數是用來儲存輸入行的陣列名稱,第二個引數是要讀取的字元數。如果這引數為20,則函式最多讀取19個字元,餘下的空間用於儲存自動在結尾處新增的空字元。getline()成員函式在讀取指定數目的字元或者遇到換行符時停止讀取。
例如,假設要使用getline()將姓名讀入到一個包含20個元素的name陣列中。可以使用這樣的函式呼叫:
cin.getline(name, 20);
這將把一行讀入到name陣列中——如果這行包含的字元不超過19個。
/******************************************
描述: cin, cin.getline(), cin.get()區別
作者: Elohim
******************************************/
#include <iostream>
using namespace std;
int main()
{
char name[20];
cin.getline(name,20);
cout<<"name : "<<name<<endl;
return 0;
}
getline()函式每次讀取一行。它通過換行符來確定尾部,單不儲存換行符。相反,在儲存字串時,它用空字元('\0')來替換換行符。
2.面向行輸入:get()
MSDN中的用法:
get();
get( char*, int, char );
get( char& );
get( streambuf&, char );
get()不讀取並丟棄換行符,而是將其留在輸入佇列中。
例如,cin.get(name, 10); cin.get(blog, 10); 連續兩個cin.get()。就出問題了。
由於第一次呼叫後,換行符將留在輸入佇列中,因此第二次呼叫時看到的第一個字元就是換行符。因此get()認為已經達到行尾,而沒有發現任何讀取內容。
如果不借助幫助,get()將不能跨過該換行符。
幸運的是,cin.get();不帶任何引數,可以讀取下一個字元(即使是換行符)。所以我們可以改成如下:
cin.get(name,10);
cin.get();
cin.get(blog,10);
這樣問題就得到了解決。
/******************************************
描述: cin, cin.getline(), cin.get()區別
作者: Elohim
******************************************/
#include <iostream>
using namespace std;
int main()
{
char name[100],blog[100];
cin.get(name,10);
cin.get();
cin.get(blog,10);
cout<<"name : "<<name<<endl;
cout<<"blog : "<<blog<<endl;
return 0;
}
---------------------
作者:EIohim
來源:CSDN
原文:https://blog.csdn.net/elohims/article/details/23560743