最近寫**的時候遇到乙個問題,就是getline函式接受標準輸入(鍵盤)時,失效了。請先看**:
#include
#include
#include
using
namespace
std;
int main()
執行時沒問題的,先輸入乙個數字,再輸入你的名字,讓我們試試,結果如下:
讀者可以自己動手試試,會發現還沒有輸入名字,程式就已經結束了,這是為什麼呢?
我們略加修改**如下:
#include
#include
#include
using
namespace
std;
int main()
就是不在接受cin輸入,結果如下:
我們可以看到getline函式可以接受輸入了,情況一定是出在cin和getline上,樓主查閱資料發現:getline是讀取整行,一行結束的標誌就是輸入回車或者結束符,這種情況下空格也算合法字元被輸入,cin是讀到空格或回車都結束,空格也是它的結束標誌
也就是說,之前我們在輸入a的時候,會按回車鍵完成輸入,而我們沒有清空輸入流衝存區,所以getline讀取到回車號,直接返回空字串。
注意到cin還可以以空格符結束,所以我們可以在不改變**的基礎上這樣輸入:
輸入完第乙個的時候,以空格結束,再輸入名字最後回車,雖然這樣能夠滿足要求,但實際上是未卜先知,顯然是不好的解決方法。
前面已經提到getline從緩衝區得到回車號直接返回,我們將輸入緩衝區清理掉不就好了嗎,於是**如下:
#include
#include
#include
using
namespace
std;
int main()
注意加了2個與cin有關的函式,cin.clear()和cin.sync(),他們的作用在**中已經說明,讓我們執行一下:
不得不說的是getline有個好處遇到空格不會結束 對於某些情況只是很方便的一點。
順帶說一下也可以用cin.ignore()函式
string str2;
cin.clear();//重置cin輸入狀態
清楚cin緩衝區未讀資訊
cin.ignore(100,'\n');
getline(cin,str2);
關於C 中getline 函式的乙個陷阱
最近寫 的時候遇到乙個問題,就是getline函式接受標準輸入 鍵盤 時,失效了。請先看 include include include using namespace std int main 執行時沒問題的,先輸入乙個數字,再輸入你的名字,讓我們試試,結果如下 讀者可以自己動手試試,會發現還沒有...
C 中的getline 函式
getline 函式是c 庫函式。它會生成乙個包含一串從輸入流讀入的字元的字串,直到以下情況發生會導致生成的此字串結束。1 到檔案結束,2 遇到函式的定界符,3 輸入達到最大限度。我們一般用string輸入字串時不能讀取空格,我們可以用getline 函式從輸入流中讀取,getline 函式之前的回...
C 中的getline函式
c 中本質上有兩種getline函式,一種在標頭檔案 istream 中,是istream類的成員函式。一種在標頭檔案 string 中,是普通函式。一 在 istream 中的getline函式有兩種過載形式 istream getline char s,streamsize n istream ...