最近寫**的時候遇到乙個問題,就是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.ignore()函式
string str2; cin.clear();//重置cin輸入狀態
清楚cin緩衝區未讀資訊
cin.ignore(100,'\n'); getline(cin,str2);
最近寫**的時候遇到乙個問題,就是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.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 ...