關於C 中getline 函式的乙個陷阱

2021-09-19 09:01:31 字數 2007 閱讀 9108

最近寫**的時候遇到乙個問題,就是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 ...