C++用getline(fin,str)讀取文本檔案的ifstream物件fin每一行,哪種寫法較好,結果正確?
ifstream fin("a.txt");
string str;
1、
while(!fin.eof())
{
getline(fin,str);
cout<<str<<endl;
}
2、
getline(fin,str);
while(!fin.eof())
{
cout<<str<<endl;
getline(fin,str);
}
3、
while(getline(fin,str))
{
cout<<str<<endl;
}
或者有沒有別的寫法?
uj5u.com熱心網友回復:
其它寫法還有,比如while true 回圈,讀例外或eof就break等等不過通常用法就是你列出的 3
而你列出的2有可能不正確,一般不用
uj5u.com熱心網友回復:
2的話如果最后一行沒有換行/回車,直接檔案結束,就會少讀一行uj5u.com熱心網友回復:
我印象中記得,最后一行如果有資料讀出的話,是不會eof()的,然后已經結束的檔案再次讀取,才會eof()?
我以前學C語言時記得EOF字符是這樣。
uj5u.com熱心網友回復:
確實是讀了最后一行(即便沒有換行/回車),但是2的邏輯最后一行如果沒有換行/回車的話是沒有輸出的uj5u.com熱心網友回復:
我用Code::Blocks試了一下,1的寫法getline貌似沒錯。
類似的寫法,以下代碼貌似有問題:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
ifstream fin("b.txt"); //b.txt行尾有換行:abc hello world
if(!fin.is_open())
{
cout<<"檔案不存在"<<endl;
return 1;
}
string s;
// while(fin>>s)
while(!fin.eof())
{
fin>>s;
cout<<s<<endl;
}
fin.close();
return 0;
}
uj5u.com熱心網友回復:
老概有沒有試下我5樓代碼的問題?uj5u.com熱心網友回復:
while(fin>>s){
cout<<s<<endl;
if (fin.eof()) break;
}
這樣寫,最后一行有沒有換行/回車都可以正確輸出
uj5u.com熱心網友回復:
如果while這樣寫,if那行可以不要。
uj5u.com熱心網友回復:
if不要結果貌似也正確。
uj5u.com熱心網友回復:
我見過while(fin>>a>>b)這種連著寫也可以,還是比較方便。但是我最近看一本國產的STL基礎第二版,代碼清一色都是類似我5樓的代碼和一樓第一種寫法,感覺eof不那么靠譜的。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/12657.html
標籤:C++ 語言
上一篇:C語言中不是說指標變數是存放某個變數地址不能存放常量嗎?
下一篇:代碼啟動時,與輸入法有沖突,在打字時,按了數字,會自動啟動按鍵,如何才能避開輸入法,使按鍵在正常狀態下運行,在輸入法時就為普通數字按鍵
