綜合知識

當前位置 /首頁/綜合知識 > /列表

C++中getline函數的用法,getline函數怎麼用

1.C++中getline()函數的用法

getline()函數有兩個版本,關於這個三個參數的版本,它的第一個參數是指向字符數組的指針,因為你定義的是:char *s(只説明s是指向字符類型的指針,但沒有説明它是指向字符數組的),這樣能通過編譯,但會運行錯誤,因為編譯器在編譯時不知道s是指向字符數組的,它以為是指向一個字符的,就只為 s所指向的內容分配一個字節的內存,這樣當運行時,程序存那1000個字符是這樣做的:先找到s所指向的內存,也就是之前分配的一個字節,存入第一個字符,然後按這個內存地址的順序繼續往下存餘下的字符(因為數組是地址連續的),但這時就可能出現錯誤,因為除了第一個內存是之前分配了的,其他的內存都是未分配的,但又可能是已經存儲了其他數據的,所以會出錯。而且是可能出錯,因為是可能已經存儲了其他數據。

getline函數怎麼用 C++中getline函數的用法

當你把程序改成這樣:

char s[1000]; (中括號裏的數字小於1000可能會出錯,但不一定出錯,原因上面已講)

或者char* s=new char[1000];

或者char a[1000];char * s=a;

或者char a[1000];char *s=&a[0];

cin.getline(s,1000,'n');

至於連用兩個getline函數沒有問題,只是第二個會覆蓋第一個所讀取的內容,最終數組中存儲的是第二次調用getline函數讀取的內容。

2.C++ getline函數的用法

應該是因為標準輸入每次回車都向程序輸入數據的原因。

標準輸入是以回車為單位向程序輸入數據,也就是説當ni hao回車後,程序得到了如下輸入

”ni haon",這個串被第一個getline讀取後,因為正常讀到了分隔符,認為輸入數據並沒有結束,第二個getline再次讀取時,發現標準輸入數據中沒有內容,返回空串,同時標記輸入數據結束。

這個問題只會發生在標準輸入上,讀文件沒有這個問題,讀文件時第二個getline會讀到第二行數據。

3.c++讀入文件時getline函數怎麼使用

getline常用的就兩種用法:

1.getline(input,str);

2.getline(input,str,delim);input就是從哪裏讀入,通常是cin

str是你的讀入字符串,

delim是分隔符。

例如:

string str;

getline(cin,str,'n'); //用換行符分割每行然後判斷讀入完成也是容易的,

直接用返回值就好了。

例如:

string str;

while(getline(cin,str))

{

cout<<str;

}

4.C++中,getline函數的詳解

C++中本質上有兩種getline函數,一種在頭文件<istream>;中,是istream類的成員函數。一種在頭文件<string>;中,是普通函數。

一、在<istream>;中的getline函數有兩種重載形式:

istream& getline (char* s, streamsize n );

istream& getline (char* s, streamsize n, char delim );

作用是從istream中讀取至多n個字符保存在s對應的數組中。即使還沒讀夠n個字符,如果遇到換行符'n'(第一種形式)或delim(第二種形式),則讀取終止,'n'或delim都不會被保存進s對應的數組中。

二、在<string>;中的getline函數有四種重載形式:

istream& getline (istream& is, string& str, char delim);istream& getline (istream&& is,

string& str, char delim);istream& getline (istream& is, string& str);

istream& getline (istream&& is, string& str);

用法和上一種類似,不過要讀取的istream是作為參數is傳進函數的。讀取的字符串保存在string類型的str中。

擴展資料:

getline不是C庫函數,而是gcc的擴展定義或者C++庫函數。它會生成一個包含一串從輸入流讀入的字符的字符串,直到以下情況發生會導致生成的此字符串結束。

1)到文件結束,

2)遇到函數的定界符,

3)輸入達到最大限度。

參考資料:getline函數-百度百科

5.getline函數用法實例

這是MSDN上對getline()函數的描述:

The getline function creates a string containing all of the characters from the input stream until one of the following situations occurs: 1)End of file. 2)The delimiter is encountered. 3)is.max_str elements have been extracted.

翻譯一下大致就是:

getline()函數會生成一個包含一串從輸入流讀入的字符的字符串,直到一下情況發生會導致生成的此字符串結束。1)到文件結束,2)遇到函數的定界符,3)輸入達到最大限度。

明顯您説問的情況是正好對於第二中情況,此處的定界符是‘n',getline()函數默認情況下以'n'為輸入結束符,而結束後的處理可以同樣用MSDN上對此函數的描述來解釋:

After the function extracts an element that compares equal to delim, in which case the element is neither put back nor appended to the controlled sequence.

翻譯一下大致意思是:

在函數遇到和結束定界符相等的字符時函數結束,同時函數抽出定界符,此種情況下該定界符既不被放回輸入流,也不被放入要生成的字符串。所以由此可以理解輸入結束後的第一個回車是定界符,被確認後拋棄,而第二個才是程序執行運行時正常需要的!

這麼解釋看樓主能理解不能,你可以這樣用一下getline看看結果就知道

1)getline(cin, s, ' ');

2)getline(cin, s, 'n');

這兩個輸入串後結束時敲的終止符是不同的第一個到test後面的istream是不被讀入的,因為斷在test後的空格處樓主也可以之輸入test然後盡情的敲回車,但是它是不會停止的因為回車被當作合理字符讀入了s字符串中,而第二個和樓主問的就一樣了。

6.求C++getline()函數的用法

getline()是屬於string流. 讀取從鍵盤輸入的字符串.直到遇到結束符.

而cin.getline()是屬於istream流. 一樣讀取從鍵盤輸入字符,但是可以限定讀取多少個字符或者將哪個字符當作結束符.

兩個函數雖然類似. 但是卻是不一樣的.

兩個函數都可以接受空格並輸出.

如:

#include <string>

#include <iostream>

using namespace std;

int main(){

string str;

getline(cin,str);

cout<<str;

}

輸入abcde fg

輸出abcde fg

而cin.getline則可以這樣用:

char[10] str;

cin.getline(str,10,'e');

輸入ab cdefg

輸出ab cd

把'e'當成結束符. 所以只接受了'e'前面的字符

7.c++中的getline()函數怎麼使用,有什麼功能

看你想用哪個啦~~

鍵盤輸入:

string s;

getline( cin, s );

cout << "You entered " << s << endl;

文件輸入:

ifstream fin("tmp.dat");

int MAX_LENGTH = 100;

char line[MAX_LENGTH];

while( fin.getline(line, MAX_LENGTH) ) {

cout << "read line: " << line << endl;

}

8.簡要介紹getline()函數的用法,並對程序中getline()用法給出註釋

函數原型:2113

istream& getline (istream& is, string& str, char delim);

istream& getline (istream& is, string& str);

參數1是 輸入5261文件流對象。

參數2是 string 型對象。

參數3是選項參數,若有,它便是分隔符。

getline(input, line) 裏 input 是 輸入文件流對象,

前面定義了:ifstream input("test.txt"); 對應文件 test,txt

前面定義了: string line, word; 所以4102line 是 string 型對象。

getline(input, line) 從 test,txt 讀入1行內容1653,放入 string 型對象 line。

返回值是 輸入文件流對象 input (如果文件到達EOF 或 發生錯專誤,eofbit,failbit,badbit 的標誌位將變屬化)。

while( getline(input, line) ) {} 循環體內應加輸入狀態的判斷,及時 break;

TAG標籤:getline 函數 #