1. 程式人生 > >cin cin.get cin.getlin

cin cin.get cin.getlin

cin:遇到空格,回車或者製表符就會結束輸入,這樣就導致了我們不能輸入一個帶有空格的字串。

cin.get(),cin.getline() :但是,很好,C++的這兩個函式幫我們解決了這一問題,它們都表示每次讀取一行字串輸入。

不過,這兩個函式也有一些區別:

cin.getline()和cin.get()。這兩個函式都讀取一行輸入,直到達到換行符。然而,隨後cin.getline()將丟棄換行符,而cin.get()將換行符保留在輸入序列中。

1.面向行的輸入:getline()
MSDN中的用法:


istream::getline
istream& getline( char* pch, int nCount, chardelim= '\n' );

istream& getline( unsigned char* puch, int nCount, char delim = '\n' );

istream& getline( signed char* psch, int nCount, char delim = '\n' );


        getline()函式讀取整行,它使用通過回車鍵輸入的換行符來確定輸入結尾。要呼叫這種方法,可以使用cin.getline()。該函式有兩個引數。第一個引數是用來儲存輸入行的陣列名稱,第二個引數是要讀取的字元數。如果這引數為20,則函式最多讀取19個字元,餘下的空間用於儲存自動在結尾處新增的空字元。getline()成員函式在讀取指定數目的字元或者遇到換行符時停止讀取。

        例如,假設要使用getline()將姓名讀入到一個包含20個元素的name陣列中。可以使用這樣的函式呼叫:

cin.getline(name, 20);

這將把一行讀入到name陣列中——如果這行包含的字元不超過19個。

/******************************************
    描述: cin, cin.getline(), cin.get()區別
    作者: Elohim
******************************************/
#include <iostream>
using namespace std;
 
int main()
{
    char name[20];
 
    cin.getline(name,20);
    cout<<"name : "<<name<<endl;
 
    return 0;
}
getline()函式每次讀取一行。它通過換行符來確定尾部,單不儲存換行符。相反,在儲存字串時,它用空字元('\0')來替換換行符。


2.面向行輸入:get()
MSDN中的用法:

get();     
get( char*, int, char );     
get( char& );     
get( streambuf&, char );

        get()不讀取並丟棄換行符,而是將其留在輸入佇列中。

        例如,cin.get(name, 10); cin.get(blog, 10); 連續兩個cin.get()。就出問題了。

由於第一次呼叫後,換行符將留在輸入佇列中,因此第二次呼叫時看到的第一個字元就是換行符。因此get()認為已經達到行尾,而沒有發現任何讀取內容。

如果不借助幫助,get()將不能跨過該換行符。

        幸運的是,cin.get();不帶任何引數,可以讀取下一個字元(即使是換行符)。所以我們可以改成如下:

cin.get(name,10);

cin.get();

cin.get(blog,10);

這樣問題就得到了解決。

/******************************************
    描述: cin, cin.getline(), cin.get()區別
    作者: Elohim
******************************************/
#include <iostream>
using namespace std;
 
int main()
{
    char name[100],blog[100];
 
    cin.get(name,10);
    cin.get();
    cin.get(blog,10);
 
    cout<<"name : "<<name<<endl;
    cout<<"blog : "<<blog<<endl;
 
    return 0;
}

--------------------- 
作者:EIohim 
來源:CSDN 
原文:https://blog.csdn.net/elohims/article/details/23560743