1.cin介紹
cin 是 C++ 的标準輸入流對象,cin 主要用于從鍵盤輸入讀取資料,其是從緩沖區讀取資料,緩沖區為空時,cin等待資料的寫入;緩沖區有資料時,cin函數取讀取資料。
1-1.cin的幾種常見讀取方法
cin>>,cin.get(),cin.getline()。
2.cin常見用法詳解
2.1. cin>>
(1). cin>>用于連續從鍵盤讀取資料,遇到空格,Tab,Enter會結束輸入。cin是智能指針,若緩沖區開始的字元為分隔符時,cin>>忽略并清除這些,直到遇到非分隔符為止;字元讀取結束後,緩沖區裡的分隔字元留在緩沖區内,cin>>不會對其作出處理。
例子1:
#include <iostream>
#include <string>
using namespace std;
int main(void)
{
int a,b;
string c;
cout <<"輸入:";
cin>>a>>b>>c;
cout <<"輸出:"<<a<<" "<<b<<" "<<c<<endl;
return 0;
}
輸入:1【Enter】2【Enter】hello【Enter】
結果:
輸出:1 2 hello
例2:
#include <string>
#include <iostream>
using namespace std;
int main()
{
string str1;
cin>>str1;
cout<<"str1:"<<str1<<endl;
string str2;
getline(cin,str2);//輸出的str2什麼都沒有,由此可見,cin>>讀取成功後,字元後面的分隔符仍然留在緩沖區的,不做處理。
cout<<"str2:"<<str2<<endl;
return 0;
}
輸入:hello【Enter】
結果:
str1:hello
str2:
(2). cin>>和cin.operator>>()是一樣的。
例子:
#include <iostream>
using namespace std;
int main(void)
{
int a;
cin.operator>>(a);
cout <<a;
return 0;
}
輸入:7
結果如下:
7
--------------------------------
Process exited after 1.884 seconds with return value 0
請按任意鍵繼續. . .
2.2.cin.get()
個人認為cin.get()的存在目的是因為從c移植到c++時,cin.get()相等于c中的getchar(),因為隻有cin.get()傳回值為int型,和getchar()相對應。
(1). cin.get()從緩沖區中讀取包括分隔符在内的當個單個字元或者一行,其不會像cin>>一樣忽略分隔符。
例子:
#include <iostream>
using namespace std;
int main()
{
char a;
char b;
char array[30];
a=cin.get();//讀取單個字元f
cin.get(b);//讀取第一個f後的Enter到b中
cin.get();//吃掉第二個f
cin.get();//吃掉第二個f後的Enter
cin.get(array,30);//利用數組(必須是char數組類型)讀入一行
cout<<"a:"<<a<<" b:"<<b<<"c:"<<array<<endl;//在這裡輸出由于b讀的是換行符 ,是以換行了。
cout <<"******";
return 0;
}
輸入f[Enter]f[Enter]hello[Enter]
結果:
a:f b:
c:hello
******
(2). cin.get()并非隻能如上面的方法所用,以下列出cin.get()的幾種常見重載形式。(注意一下給定空間大小參數的函數的注釋)。如果第三個空間大小參數給的是a(這裡假設給出的第二個參數空間大小小于輸入的字元長度),那麼cin.get ()會将剩下的字元串保留在緩沖區裡,後面的cin可以讀取。
例子:
#include<iosream>
using namespace std;
int main()
{
char a,b,c;
char array1[30];
char array2[30];
a=cin.get();//無參
cin.get(); //讀入緩沖區裡的分隔字元
cin.get(b);//一個參數
cin.get();
cin.get(array1,3);//兩個參數,第二個參數為目标空間大小,這裡給了3,但是結果會輸出兩個,因為還有一個系統會自動加上'\0'。
cin.get(array2,20,a);//三個參數,第三個為讀取結束的字元。
cout<<"a="<<a<<",b="<<b<<",array1="<<array1<<",array2="<<array2<<endl;
return 0;
}
輸入:a【Enter】b【Enter】hello【Enter】scalar【Enter】
結果:
a=a,b=b,array1=he,array2=llo
sc
(3). 在必要的時候使用其無參數的重載函數一般用來吃掉緩沖區内無用的字元(如Enter等)。
(例子可以從上述幾個代碼中可以看出。)
2.3. cin.getline()
(1). cin.getline()用于從輸入裝置鍵盤讀取字元串,并以指定的結束符結束。當輸入超長時,
直接上代碼啦:
#include <string>
#include <iostream>
using namespace std;
int main()
{
char array1[30];
char array2[30];
cin.getline(array1,30);//預設換行符結束
cin.getline(array2,30,'e');//以第三個參數為結束符
cout<<"array1="<<array1<<",array2="<<array2<<endl;
return 0;
}
輸入:hello【空格】hello【Enter】your【空格】name【Enter】
結果:
array1=hello hello,array2=your nam
3. cin.get ()和cin.getline()的不同點
cin.get() | cin.getline() |
---|---|
遇到[enter]時會結束目前輸入,不删除Enter | 當遇到[enter]時會結束目前輸入,删除Enter |
– | – |
超長時,函數會将剩下的字元串留在緩沖區内 | 超長時,會引起cin函數錯誤,使得後面的cin操作不再執行 |
– | – |
當遇到給定的結束符時會結束輸入,但不會删除緩沖區中的結束符 | 當遇到給定的結束符時會結束輸入,并把結束符從緩沖區中删除 |
第三部分就不上碼啦,自個闊以動手試試哈!!!
emm~~如果有說錯的,歡迎大佬指正啦。嘿咻嘿咻,溜了哈!