關於用cin
cin.get() getchar(), getline輸入時的結束符問題
幾個輸入 cin.get(),getchar,cin. getline的賦值問題
一,關於這個幾個函數怎麼處理它遇到的第一個字元
cin.get()
# include <iostream>
# include <string>
using namespace std;
int main()
{
char a;
char b;
a = getchar();
b = cin.get();
cout << a << b << endl;
system("pause");
return 0;
}
輸入: a+空格+b+按下斷行符號
輸出
輸入:a+按下斷行符號
可以見到,b字元是空白,或者是一個斷行符號
結論:,cin.get()遇到開頭的空格或者斷行符號直接就讀取賦給b了
getchar()
將輸入a和b的語句換為如下語句
char a ,b ;
a = getchar();
b = getchar();
輸入: a+空格+b+按下斷行符號
輸入:a+按下斷行符號
可以見到,b字元是空白,或者是一個斷行符號
結論:,getchar()和cin.get()一樣,遇到開頭的空格或者斷行符號直接就讀取賦給b了
cin
將輸入a和b的語句換為如下語句
char a ,b ;
a = getchar();
cin >> b;
輸入: a+空格+b+按下斷行符號
輸入:a+按下斷行符號+b+按下斷行符號
結論 :cin可以跳過開頭的空格和斷行符號
getline
將輸入a和b的語句換為如下語句
char a;
string b
a = getchar();
getline(cin,b);
輸入: a+空格+b+按下斷行符號
輸入:a+按下斷行符號
結論:getline讀取開頭的空格和斷行符號,不過當讀取到斷行符號時並不是把它賦給了b,而是作為b的結束標識符
二,關於這幾個字元怎麼處理它的結束符
string a ,b,c;
cin >> a;
b = getchar();
cout << a << b << endl;
輸入:a+斷行符號
結論:cin 的結束符是斷行符號,繼續留在了輸出隊列中,被接下來的gechar給讀取了,,,,其他的幾個輸入函數,除了getline也是會保留結束符
string a ,b,c;
getline(cin,a);
b = getchar();
cout << a << b << endl;
輸入:a+斷行符號+b+斷行符號
結論:getline的結束操作符‘/n’,是會被丟棄的,不會被保留在輸入隊列中的
為瞭解決上面留在隊列中的不想要的字元,我們可以通過兩個方法解決
第一個是吃掉這個字元,調用一次cin.get()
第二個是掉過這個字元,調用一次cin.ignore();