1. 程式人生 > >C++輸入(更新中)

C++輸入(更新中)

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()

,讀取第一行輸入末尾的換行符,此時就可以正常輸入第二行內容了,不會直接cout.

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()