輸入相關函數

一、cin>>          

(1)用法一:輸入一個數字

#include 
using namespace std;
main ()
{
int a,b;
cin>>a>>b;
cout<<a+b<<endl;
}

輸入:ios

2[回車]3[回車]

輸出:c++

5

 

(2)用法二:接受一個字符串,遇「空格」、「TAB」、「回車」結束

#include 
using namespace std;
main ()
{
char a[20];
cin>>a;
cout<<a<<endl;
}

輸入:程序員

jkljkljkl

輸出:數組

 

jkljkljkl

 

輸入:緩存

jkljkl jkljkl       //遇空格結束

輸出:函數

 

jkljkl

 

二、cin.get()

(1)用法一: cin.get(字符變量名)

    做用:能夠用來接收字符spa

#include 
using namespace std;
main ()
{
char ch;
ch=cin.get();               //或者cin.get(ch);
cout<<ch<<endl;
}

輸入:指針

jljkljkl

輸出:調試

j

 

(2)用法二:cin.get(字符數組名,接收字符數目)

    做用:用來接收一行字符串,能夠接收空格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')

 

(3)用法三:cin.get(無參數)

    做用:沒有參數主要是用於捨棄輸入流中的不須要的字符,或者捨棄回車,彌補cin.get(字符數組名,接收字符數目)的不足

 

三、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

輸出:

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

 

四、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流,是不同的兩個函數。

五、gets()      

以回車換行符爲結束標誌。

函數:

gets(字符指針)

頭文件:

string.h(c中),c++不需包含此頭文件

原型:

char *gets( char *buffer );

功能:

從stdin流中讀取字符串,直至接受到換行符或EOF時中止,並將讀取的結果存放在buffer指針所指向的字符數組中。換行符不做爲讀取串的內容,讀取的換行符被轉換爲null值,並由此來結束字符串。

返回值:

讀入成功,返回與參數buffer相同的指針;讀入過程當中遇到EOF(End-of-File)或發生錯誤,返回NULL指針。因此在遇到返回值爲NULL的狀況,要用ferrorfeof函數檢查是發生錯誤仍是遇到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>」

說明:

 

當程序調用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++也能夠兼容,可是儘可能不用或少用;

相關文章
相關標籤/搜索