C++ 中的 cin/cin.get()/cin.getline()/getline/getchar()

在C++中有關從終端中輸入數據的函數的理解一直比較模糊,寫在這裏面來分享給你們,而且方便本身之後查閱。html

我通常在寫C++程序的時候都會在頭文件中引入iostream, cstdio, cstring, cmath這幾個文件,以便方便後面相關庫內函數的應用。下面,將按照順序介紹這些函數。ios

1. cinc++

  cin是從文件輸入流中取出一個int/char/string等。最簡單的用法是輸入一個數字,即數組

    

#include <iostream> 
using namespace std; 
main () 
{ 
int a,b; 
char c[20];
string str;
cin >> a >> b;
cin >> c;
cin >> str; cout << a+b << endl;
cout << c<< endl;
cout << str << endl; }

注意:「>>」會過濾掉不可見字符(如空格,enter, Tab等),當輸入爲字符串時,遇到「空格」、enter, Tab等會表示字符串輸入結束。可是,cin讀完以後雖然會忽略這些,他們的指針仍會停留在這些終止符號上。函數

cin>>noskipws>>input[j];//不想略過空白字符,那就使用 noskipws 流控制spa

2. cin.get()指針

用法一:使用cin.get(ch)來將接收到的字符存入 char ch中,若是讀取成功返回非0值,讀取失敗(遇到文件結束符eof)返回0,可接受空格,回車,Tab等。code

#include<iostream>
using namespace std;

int main(){
    char c;
    while(cin.get(c))
        cout.put(c);
    return 0;
}

用法二:使用char ch = cin.get(), 將接收到的字符存入ch中,cin.get()函數的返回值就是這個字符,文件結束符會返回EOF,通常以-1表明EOF。htm

#include<iostream>
using namespace std;

int main(){
    char c;
    while((c=cin.get()!=EOF))
        cout.put(c);
    return 0;
}

用法三:cin.get(字符指針,字符個數n,終止字符),讀取n-1個字符,若在n-1個字符以前遇到終止字符,提早結束讀取。blog

#include<iostream>
using namespace std;

int main(){
    char c[20];
    cin.get(c,10,'\n');
    cout<<c<<endl;
    return 0;
}

或者使用char*, 以下

#include<iostream>
using namespace std;

int main(){
    char* c;
    c = new char[20]; //動態指針使用前須要分配內存 
    cin.get(c,10,'\n');
    cout<<c<<endl;
    return 0;
}

 

3. cin.getline()(字符數組(或指針),字符個數n,終止字符)

cin.getline(),和cin.get()的用法相似,只不過cin.getline()的終止字符默認爲「\n」(換行符),並且cin.getline與cin.get的區別:cin.get( , , )遇到終止字符中止讀取後,指針不向後移動;cin.getline( , , )遇到終止字符結束後,指針移到終止字符後。

#include<iostream>
using namespace std;
int main(){
    char c[20];
    cin.getline(c,20,'/');
    cout<<c<<endl;
    return 0;
}

 

4. getline()

getline()是string類的函數,它通常用來輸入string類型的字符串,接受空格,與到換行符結束,結束後指針如cin.getline()同樣會指到換行符以後。

和cin.getline()相似,可是cin.getline()屬於istream流,而getline()屬於string流,是不同的兩個函數。

#include<iostream> 
#include<string> 
using namespace std; 
main () 
{ 
string str; 
getline(cin,str); 
cout<<str<<endl; 
}

5. gechar() 須要引入 <cstdio>

C 庫函數 int getchar(void) 從標準輸入 stdin 獲取一個字符(一個無符號字符)。

#include <stdio.h>

int main ()
{
   char c;
 
   printf("請輸入字符:");
   c = getchar();
 
   printf("輸入的字符:");
   putchar(c);

   return(0);
}

 

這個能夠看《c++的geline問題》http://www.cnblogs.com/hhddcpp/p/4308587.html一文,當出現getline(cin,str);語句不執行而是直接跳過的時候,能夠在getline一句以前加一句cin.get()或者getchar(),吃掉不須要的空格和換行符。

#include <iostream>
#include <cstring>
#include <cstdio>


using namespace std;

int main()
{
    string str;
    int guess[10];

    while(str != "abc"){
        cin >> guess[j];
        //getchar();
        cin.get();
        getline(cin , str);
        j++;
    }
    return 0;
}
相關文章
相關標籤/搜索