输入相关函数
1、cin>>??????????
(1)用法一:輸入一個數字
#include using namespace std; main () { int a,b; cin>>a>>b; cout<<a+b<<endl; }輸入:
2[回車]3[回車]輸出:
5?
(2)用法二:接受一個字符串,遇“空格”、“TAB”、“回車”結束
#include using namespace std; main () { char a[20]; cin>>a; cout<<a<<endl; }輸入:
jkljkljkl輸出:
?
jkljkljkl?
輸入:
jkljkl jkljkl //遇空格結束輸出:
?
jkljkl?
2、cin.get()
(1)用法一: cin.get(字符變量名)
?作用:可以用來接收字符
#include using namespace std; main () { char ch; ch=cin.get(); //或者cin.get(ch); cout<<ch<<endl; }輸入:
jljkljkl輸出:
j?
(2)用法二:cin.get(字符數組名,接收字符數目)
?作用:用來接收一行字符串,可以接收空格
#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')?
(3)用法三:cin.get(無參數)
?作用:沒有參數主要是用于舍棄輸入流中的不需要的字符,或者舍棄回車,彌補cin.get(字符數組名,接收字符數目)的不足
?
3、cin.getline()??
? ? ??作用:接受一個字符串,可以接收空格并輸出
#include using namespace std; main () { char m[20]; cin.getline(m,5); cout<<m<<endl; }輸入:
jkljkljkl輸出:
jklj?
注意:接受5個字符到m中,其中最后一個為'\0',所以只看到4個字符輸出;
如果把5改成20:
輸入:
輸出:
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?
4、getline()????
作用: 接受一個字符串,可以接收空格并輸出,需包含“#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流,是不一樣的兩個函數。
5、gets() ? ? ?
以回車換行符為結束標志。
函數:
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()因為可以接收空格,所以不會產 生這個錯誤;
6、getchar()
作用:
接收一個字符,需包含“#include<stdio.h>”
說明:
?
當程序調用getchar時,程序就等著用戶按鍵,用戶輸入的字符被存放在鍵盤緩沖區中,直到用戶按回車為止(回車字符也放在緩沖區中)。 當用戶鍵入回車之后,getchar才開始從stdio流中每次讀入一個字符,getchar函數的返回值是用戶輸入的字符的ASCII碼,如出錯返回-1,且將用戶輸入的字符回顯到屏幕。如用戶在按回車之前輸入了不止一個字符,其他字符會保留在鍵盤緩存區中,等待后續getchar調用讀取。也就是說,后續的getchar調用不會等待用戶按鍵,而直接讀取緩沖區中的字符,直到緩沖區中的字符讀完為后,才等待用戶按鍵。 區別:?
getch與getchar基本功能相同,差別是getch直接從鍵盤獲取鍵值,不等待用戶按回車,只要用戶按一個鍵,getch就立刻返回,getch返回值是用戶輸入的ASCⅡ碼,出錯返回-1。輸入的字符不會回顯在屏幕上.getch函數常用于程序調試中,在調試時,在關鍵位置顯示有關的結果以待查看,然后用getch函數暫停程序運行,當按任意鍵后程序繼續運行。 示例:?
#include #include using namespace std; main () { char ch; ch=getchar(); //不能寫成getchar(ch); cout<<ch<<endl; }輸入:
jkljkljkl輸出:
j?
//getchar()是C語言的函數,C++也可以兼容,但是盡量不用或少用;
?
轉載于:https://www.cnblogs.com/yedushusheng/p/5520485.html
總結
- 上一篇: js的工作原理
- 下一篇: 软件或jar包等名字里的GA意思