#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];這種情況下,換行符留在輸入佇列中,第二次呼叫時看到的就是乙個換行符,get()認為到達行尾,而沒有發現應該讀入的內容。cin.get(name1, size);
cin.get(name2, size);
此時可以使用get()的另一種變體。使用cin.get()讀取下乙個字元,這樣來處理換行符,為讀取下一行做準備。
cin.get(name1, size);或者cin.get();
cin.get(name2, size);
cin.get(name1, size).get();get()使得錯誤檢查更加方便。如何知道停止讀取的原因是由於已經讀取了整行,而不是由於陣列已經填滿?可以檢視一下下乙個字元,若是換行符則說明已經讀取了整行,否則,說明行中害有其他輸入。cin.get(name2, size);
空行:當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 輸入一...