(轉)cin cin.get cin.getline cin

(轉)cin cin.get cin.getline

cin<<的結束符有enter space tab
cin.get()的結束符只有enter,但會把enter放入隊列等待
cin.getline()的結束符也只有enter,但不會把enter放入隊列


如果用cin>>…做過輸入,在使用cin.getline之前,需要處理一下。處理的方法很多,你可以在cin>>…的輸入語句後加一個語句cin.get();。


用getline()讀取輸入行

 
當程序使用cin輸入時,cin用空白符和行結束符 將各個值分開 。根據所需輸入的值,如需讀取一整行文本並且分開不同的域,則要使用getline成員函數
 

getline ( char * line , int size, char = '"n')

第二個參數是本次讀取的最大字符個數,第三個參數是分隔字符,作爲讀取一行結束的標誌。

下面的函數從鍵盤讀取一行文本

# include < iostream >
using namespace std ;

int main( )
{
    char str[ 128] ;
    
    cin . getline ( str, sizeof ( str) ) ;
    cout < < "you typed :" < < str< < endl ;
    

}

# include < iostream >
using namespace std ;

int main( )
{
    char str[ 128] ;
    cout < < "please input text and enter" < < endl ;
    cin . getline ( str, sizeof ( str) , 'X' ) ;
    cout < < "you typed first line:" < < str< < endl ;
    
    cin . getline ( str, sizeof ( str) ) ;
    cout < < "sencond line :" < < str< < endl ;

}

在鍵入X之前,可以按一次到多次回車鍵,而並不結束第一個cin.getline()的輸入 。 第一個cin.getline()的輸入操作將以鍵入X後的第一個回車結束。

cin.getline() 與 cin>>str 的一個不同是,前者輸入一行,行中可以包含空格,後者卻以空格或回車作爲字串結束,不包含空格。

用get()讀取一個字符

每次獲取一個字符:char istream::get();

//get.cpp

# include < iostream >
using namespace std ;

int main( )
{
    char letter;
    
    while ( ! cin . eof ( ) )
    {
        letter= cin . get( ) ;
        letter= toupper ( letter) ;
        if ( letter= = 'Y' )
        {
            cout < < " "nY have been met "n" ;
            break ;
        
        }
        cout < < letter;
    }

}


使用流成員函數的輸入操作不只限於鍵盤,上例程序可從重定向輸入中讀取。

$ ./get  <  get.cpp

letter =cin.get();與cin>>letter  都是從輸入流中取一個字符,但卻有區別,默認情況下,cin>>letter將跳過任何在文件中發現的任何空白字符(空白字符指空格, tab,backspace,回車)  .而cin.get不跳過空白字符。

用get( ) 輸入一系列字符

istream & istream : : get( char * , int n, char delim= '"n' ) ;

istream fin( "abc.txt" ) ;

char buffer[80];

fin>>buffer;          //不能保證輸入字符個數在80以內。

可以改寫爲

istream fin("abc.txt");

char buffer[80];

fin.get(buffer,80);      //保證輸入字符個數在80以內

getline()與get()第二種形式相同,唯一的例外是getline()從輸入流中輸入一系列字符時包括分隔符,而get()不包括分隔符。

put成員函數,依次輸出字符。

# include < iostream >
using namespace std ;

int main( )
{
    char letter;
    for ( letter= 'A' ; letter< = 'Z' ; letter+ + )
    cout . put( letter) ;     

}

cout<<letter; 與cout.put(letter)的區別是:前者顯示以數據類型表示的形式,後者以字符方式顯示。若letter是char型,兩者一樣。若 letter是int型,則cout<<letter顯示數字而不是字符了。

# include < iostream >
# include < fstream >
using namespace std ;

int main( )
{
    ifstream in( "put.cpp" ) ;
    
    if ( in. fail( ) )
    {
        cerr < < "Error opening the file"n" ;
    }
    
    while ( ! in. eof ( ) )
    {
        cout . put( in. get( ) ) ;
    }
    
}
//注意get()這種形勢它讀取了空白符(含回車符),不跳過任何的字符。與

get(char * ,int n ,delim='"n')這種行式不同,他不包括分隔符delim.

發表於 2008-07-08 15:31 周光明 閱讀(256) 評論(0)  編輯 收藏 網摘
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章