C++?使用getline()從文件中讀取一行字符串方法示例
getline() 方法
getline() 方法從 cin 輸入流緩沖區(qū)中讀取一行字符串。在此基礎(chǔ)上,getline() 方法還適用于讀取指定文件中的一行數(shù)據(jù),本節(jié)就給大家做詳細(xì)的講解。
我們知道,getline() 方法定義在 istream 類中,而 fstream 和 ifstream 類繼承自 istream 類,因此 fstream 和 ifstream 的類對(duì)象可以調(diào)用 getline() 成員方法。
文件流對(duì)象調(diào)用 getline() 方法
當(dāng)文件流對(duì)象調(diào)用 getline() 方法時(shí),該方法的功能就變成了從指定文件中讀取一行字符串。該方法有以下 2 種語(yǔ)法格式:
istream & getline(char* buf, int bufSize); istream & getline(char* buf, int bufSize, char delim);
其中,第一種語(yǔ)法格式用于從文件輸入流緩沖區(qū)中讀取 bufSize-1 個(gè)字符到 buf,或遇到 \n 為止(哪個(gè)條件先滿足就按哪個(gè)執(zhí)行),該方法會(huì)自動(dòng)在 buf 中讀入數(shù)據(jù)的結(jié)尾添加 '\0'。第二種語(yǔ)法格式和第一種的區(qū)別在于,第一個(gè)版本是讀到 \n 為止,第二個(gè)版本是讀到 delim 字符為止。\n 或 delim 都不會(huì)被讀入 buf,但會(huì)被從文件輸入流緩沖區(qū)中取走。以上 2 種格式中,getline() 方法都會(huì)返回一個(gè)當(dāng)前所作用對(duì)象的引用。比如,obj.getline() 會(huì)返回 obj 的引用。
注意,如果文件輸入流中 \n 或 delim 之前的字符個(gè)數(shù)達(dá)到或超過(guò) bufSize,就會(huì)導(dǎo)致讀取失敗。
舉例
#include <iostream> #include <fstream> using namespace std; int main() { char c[40]; //以二進(jìn)制模式打開 in.txt 文件 ifstream inFile("in.txt", ios::in | ios::binary); //判斷文件是否正常打開 if (!inFile) { cout << "error" << endl; return 0; } //從 in.txt 文件中讀取一行字符串,最多不超過(guò) 39 個(gè) inFile.getline(c, 40); cout << c ; inFile.close(); return 0; }
假設(shè) in.txt 文件中存有如下字符串:
http://c.biancheng.net/cplus/
則程序執(zhí)行結(jié)果為:
http://c.biancheng.net/cplus/
當(dāng)然,我們也可以使用 getline() 方法的第二種語(yǔ)法格式。例如,更改上面程序中第 15 行代碼為:
inFile.getline(c,40,'c');
這意味著,一旦遇到字符 'c',getline() 方法就會(huì)停止讀取。 再次運(yùn)行程序,其輸出結(jié)果為:
http://
另外,如果想讀取文件中的多行數(shù)據(jù),可以這樣做:
#include <iostream> #include <fstream> using namespace std; int main() { char c[40]; ifstream inFile("in.txt", ios::in | ios::binary); if (!inFile) { cout << "error" << endl; return 0; } //連續(xù)以行為單位,讀取 in.txt 文件中的數(shù)據(jù) while (inFile.getline(c, 40)) { cout << c << endl; } inFile.close(); return 0; }
假設(shè) in.txt 文件中存有如下數(shù)據(jù):
http://c.biancheng.net/cplus/
http://c.biancheng.net/python/
http://c.biancheng.net/java/
則程序執(zhí)行結(jié)果為:
http://c.biancheng.net/cplus/
http://c.biancheng.net/python/
http://c.biancheng.net/java/
以上就是C++ 使用getline()從文件中讀取一行字符串方法示例的詳細(xì)內(nèi)容,更多關(guān)于C++ getline讀取文件字符串的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C語(yǔ)言實(shí)現(xiàn)學(xué)生消費(fèi)管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)學(xué)生消費(fèi)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08C語(yǔ)言數(shù)組與地址、數(shù)組名到底是什么詳解
在寫代碼的時(shí)候,我們經(jīng)常用到數(shù)組,那么有沒有想過(guò)數(shù)組名是什么呢?這篇文章主要給大家介紹了關(guān)于C語(yǔ)言數(shù)組與地址、數(shù)組名到底是什么的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06C++中delete和delete[]的區(qū)別說(shuō)明
一直對(duì)C++中的delete和delete[]的區(qū)別不甚了解,今天遇到了,上網(wǎng)查了一下,得出了結(jié)論。希望本文可以對(duì)你有所幫助2013-02-02