C 字串輸入(getline正確使用)

2021-10-20 09:30:46 字數 1756 閱讀 1706

#include

const

int size=50;

//陣列長度

using

namespace std;

intmain()

這是乙個獲取年齡和姓名的**片段。當輸入如下時候,程式成功執行。

但這只是因為程式的漏洞被輸入巧妙地掩飾了。當名字輸入不再是「daming」而是「li daming」時,程式還沒等到輸入年齡就提前結束了。

原因是cin使用空白(空格、製表符、回車符)作為結束的標誌,這意味著cin在獲取字串時只能獲取乙個單詞。

實際例子中的情況就是cin將「li」輸入到name當中,然後把「daming」輸入進age,但是由於age是整數型變數,輸入失敗,然後程式結束。

char name1[size], name2[size];

cin.get(name1, size);

cin.get(name2, size);

這種情況下,換行符留在輸入佇列中,第二次呼叫時看到的就是乙個換行符,get()認為到達行尾,而沒有發現應該讀入的內容。

此時可以使用get()的另一種變體。使用cin.get()讀取下乙個字元,這樣來處理換行符,為讀取下一行做準備。

cin.get(name1, size);

cin.get();

cin.get(name2, size);

或者

cin.get(name1, size).get();

cin.get(name2, size);

get()使得錯誤檢查更加方便。如何知道停止讀取的原因是由於已經讀取了整行,而不是由於陣列已經填滿?可以檢視一下下乙個字元,若是換行符則說明已經讀取了整行,否則,說明行中害有其他輸入。

空行:當get()讀取空行時,將設定失效位。

cin.clear();//輸入被阻斷,可以用此命令來恢復

輸入字串大於分配空間:getline()和get()將剩餘的字元留在輸入佇列中,getline()設失效位,並關閉輸入。

#include

const

int size=50;

//陣列長度

using

namespace std;

intmain()

要使用string類首先得包含標頭檔案string,string類在實現字元陣列的功能的同時使得字串的操作更加簡單、方便、安全。

getline( cin , str ) //將一行輸入到string物件中

如果想要迴圈輸入多組資訊。

#include

#include

using

namespace std;

struct member //

;int

main()

return0;

}

C 使用getline輸入字串

使用getline需要引入標頭檔案string include string ss getline cin,ss 這樣,getline遇到回車或者eof才結束操作。需要注意的是,如果getline用在cin後面,比如 string ss int t cin t getline cin,ss 通過ge...

C 字串的輸入和用getline輸入遇到的問題

c 中的字串讀入我們通常是用 cin str 它只要碰到空格或者換行符就意味著本字串讀取結束,且不會讀取空格和換行符 相當於叢輸入流中丟掉 而getline函式讀取一行字串,可以讀入空格,遇到換行符結束 從輸入流中丟掉該換行符 且緊跟後續的getline不會讀取到該換行符。但是,注意一點就是 如果唯...

關於C 中字串輸入get與getline的區別

最近使用c 中自己老是忘記的乙個點,get與getline的區別。get和getline所屬iostream類,作用是讀取一整行,通過換行符確定讀取結束,他們都可以讀取空格。getline會在讀取結束後捨棄換行符,而get回將換行符保留到輸入序列中。1 char arr 100 2 cout 輸入一...