#include using namespace std; main () { int a,b; cin>>a>>b; cout<<a+b<<endl; }
輸入:ios
2[回車]3[回車]
輸出:c++
5
#include using namespace std; main () { char a[20]; cin>>a; cout<<a<<endl; }
輸入:程序員
jkljkljkl
輸出:數組
jkljkljkl
輸入:緩存
jkljkl jkljkl //遇空格結束
輸出:函數
jkljkl
做用:能夠用來接收字符spa
#include using namespace std; main () { char ch; ch=cin.get(); //或者cin.get(ch); cout<<ch<<endl; }
輸入:指針
jljkljkl
輸出:調試
j
做用:用來接收一行字符串,能夠接收空格code
#include using namespace std; main () { char a[20]; cin.get(a,20); cout<<a<<endl; }
輸入:
jkl jkl jkl
輸出:
jkl jkl jkl
輸入:
abcdeabcdeabcdeabcdeabcde (輸入25個字符)
輸出:
abcdeabcdeabcdeabcd (接收19個字符+1個'\0')
做用:沒有參數主要是用於捨棄輸入流中的不須要的字符,或者捨棄回車,彌補cin.get(字符數組名,接收字符數目)的不足
做用:接受一個字符串,能夠接收空格並輸出
#include using namespace std; main () { char m[20]; cin.getline(m,5); cout<<m<<endl; }
輸入:
jkljkljkl
輸出:
jklj
注意:接受5個字符到m中,其中最後一個爲'\0',因此只看到4個字符輸出;
若是把5改爲20:
輸入:
jkljkljkl
輸出:
jkljkljkl
輸入:
jklf fjlsjf fjsdklf
輸出:
jklf fjlsjf fjsdklf
拓展:
cin.getline()實際上有三個參數,cin.getline(接收字符串的名稱,接收個數5,結束字符)
當第三個參數省略時,系統默認爲'\0'
若是將例子中cin.getline()改成cin.getline(m,5,'a');當輸入jlkjkljkl時輸出jklj,輸入jkaljkljkl時,輸出jk
注意:上面這一指定結束字符的特性比較有用!
當用在多維數組中的時候,也能夠用cin.getline(m[i],20)之類的用法:
#include #include using namespace std; main () { char m[3][20]; for(int i=0;i<3;i++) { cout<<"\n請輸入第"<<i+1<<"個字符串:"<<endl; cin.getline(m[i],20); } cout<<endl; for(int j=0;j<3;j++) cout<<"輸出m["<<j<<"]的值:"<<m[j]<<endl;< font=""> }
請輸入第1個字符串:
kskr1
請輸入第2個字符串:
kskr2
請輸入第3個字符串:
kskr3
輸出m[0]的值:
kskr1
輸出m[1]的值:
kskr2
輸出m[2]的值:
kskr3
做用: 接受一個字符串,能夠接收空格並輸出,需包含「#include<stdio.h>」。
注意:
從stdin流中讀字符,只至關於從標準輸入緩衝區中去讀取按順序對應的一個字符(包含空格或回車)。
#include #include using namespace std; main () { string str; getline(cin,str); cout<<str<<endl; }
輸入:
jkljkljkl
輸出:
jkljkljkl
輸入:
jkl jfksldfj jklsjfl
輸出:
jkl jfksldfj jklsjfl
和cin.getline()相似,可是cin.getline()屬於istream流,而getline()屬於string流,是不同的兩個函數。
以回車換行符爲結束標誌。
函數:
gets(字符指針)
頭文件:
string.h(c中),c++不需包含此頭文件
原型:
char *gets( char *buffer );
功能:
從stdin流中讀取字符串,直至接受到換行符或EOF時中止,並將讀取的結果存放在buffer指針所指向的字符數組中。換行符不做爲讀取串的內容,讀取的換行符被轉換爲null值,並由此來結束字符串。
返回值:
讀入成功,返回與參數buffer相同的指針;讀入過程當中遇到EOF(End-of-File)或發生錯誤,返回NULL指針。因此在遇到返回值爲NULL的狀況,要用ferror或feof函數檢查是發生錯誤仍是遇到EOF。
注意:
本函數能夠無限讀取,不會判斷上限,因此程序員應該確保buffer的空間足夠大,以便在執行讀操做時不發生溢出。若是溢出,多出來的字符將被寫入到堆棧中,這就覆蓋了堆棧原先的內容,破壞一個或多個不相關變量的值,爲了不這種狀況,咱們能夠用gets_s()來替換gets()。這個事實致使gets函數只適用於玩具程序。
區別:
gets(s)函數與scanf("%s:",&s)類似,但不徹底相同,使用scanf("%s",&s);函數輸入字符串時存在一個問題,就是若是輸入了空格會認爲字符串結束,空格後的字符將做爲下一個輸入項處理,但gets()函數將接收輸入的整個字符串直到遇到換行爲止。
說明:
gets(s);函數中的變量s爲一字符串。若是爲單個字符,編譯鏈接不會有錯誤,但運行後會出現」Null pointer asignment"的錯誤。
#include<iostream> using namespace std; int main() { char str[100]; gets(str); cout<<str<<endl; return 0; }
舉例:
#include #include using namespace std; main () { char m[20]; gets(m); //不能寫成m=gets(); cout<<m<<endl; }
輸入:
jkljkljkl
輸出:
jkljkljkl
輸入:
jkl jkl jkl
輸出:
jkl jkl jkl
相似cin.getline()裏面的一個例子,gets()一樣能夠用在多維數組裏面:
#include #include using namespace std; main () { char m[3][20]; for(int i=0;i<3;i++) { cout<<"\n請輸入第"<<i+1<<"個字符串:"<<endl; gets(m[i]); } cout<<endl; for(int j=0;j<3;j++) cout<<"輸出m["<<j<<"]的值:"<<m[j]<<endl;< font=""> }
請輸入第1個字符串:
kskr1
請輸入第2個字符串:
kskr2
請輸入第3個字符串:
kskr3
輸出m[0]的值:
kskr1
輸出m[1]的值:
kskr2
輸出m[2]的值:
kskr3
自我感受gets()和cin.getline()的用法很相似,只不過cin.getline()多一個參數罷了;
這裏順帶說明一下,對於本文中的這個kskr1,kskr2,kskr3的例子,對於cin>>也能夠適用,緣由是這裏輸入的沒有空 格,若是輸入了空格,好比「ks kr jkl[回車]」那麼cin就會已經接收到3個字符串,「ks,kr,jkl」;再如「kskr 1[回車]kskr 2[回車]」,那麼則接收「kskr,1,kskr」;這不是咱們所要的結果!而cin.getline()和gets()由於能夠接收空格,因此不會產 生這個錯誤;
六、getchar()
做用:
接收一個字符,需包含「#include<stdio.h>」
說明:
#include #include using namespace std; main () { char ch; ch=getchar(); //不能寫成getchar(ch); cout<<ch<<endl; }
輸入:
jkljkljkl
輸出:
j
//getchar()是C語言的函數,C++也能夠兼容,可是儘可能不用或少用;