C++輸入(更新中)
阿新 • • 發佈:2018-11-21
cin
讀取一個單詞,遇空白(空格、製表符、回車)停止讀取
char a[10];
cin >> a;//輸入abcd efg
cout << a;//輸出abcd
getline()、get()
讀取行輸入,遇換行符停止讀取
隨後getline()
丟棄換行符,get()
將換行符保留在輸入佇列中
- getline()
呼叫:cin.getline(a,b)
//其中a是儲存輸入行的陣列名,b是讀取的字元個數。
如果b=20,則最多讀取19個字元,餘下空間用於儲存自動在結尾新增的空字元
char a[10];
cin.getline(a,10 );//輸入abcd efg
cout << a;//輸出abcd efg
getline()
以換行符確定行尾,但不儲存換行符,相反,用空字元代替換行符
- get()
呼叫:cin.get(a,b)
//與getline()
類似,其中a是儲存輸入行的陣列名,b是讀取的字元個數。
char a[10];
char b[10];
cin.get(a,10);//輸入abcd efg
cin.get(b, 10);
cout << a << endl;//輸出abcd efg
cout << b << endl;//輸出空行
因為get()
將換行符保留在輸入佇列中,輸入第一行後,換行符在佇列中,當成b的輸入了,所以輸入第一行回車後不會再有輸入b的機會了,此時b儲存了上一輸入末尾的換行符。
要實現兩行正常輸入的話,我們需要在第一次輸入後加一行cin.get()
char a[10];
char b[10];
cin.get(a,10);//輸入abcd efg
cin.get();
cin.get(b, 10);//輸入gh
cout << a << endl;//輸出abcd efg
cout << b << endl;//輸出gh
getline()使用起來簡單,但是get()更容易查錯:檢查下一輸入字元,如果是換行符,說明已讀取整行,否則說明該行中還有其他輸入。這樣便於判斷停止讀取的原因是已經讀取了整行還是陣列已填滿。
同時輸入數字和字串容易遇到問題:
char a[10];
int c;
cin >> c;
cin.getline(a,10);//沒有輸入機會
cout << c << endl;
cout << a << endl;//輸出空行
輸入數字後留有一個換行符在輸入佇列中,換行符進入下一次輸入,getline()
讀到換行符,輸出空行。解決方法同上,加入一行cin.get()
,或者先輸入字串再輸入數字。
也可以將呼叫拼接:cin>>c
換成 (cin>>c).get()