乙個朋友向我請教乙個程式,相關**如下:
string s;
vector vs;
ifstream infile("f://myreceivefiles//fillcompo_kp.mod", ios::in);
while (getline(infile, s))
vs.push_back(s);
coutinfile.open("f://myreceivefiles//fillcompo_line.mod", ios::in);
while (getline(infile, s))
vs.push_back(s);
infile.close();
cout我測試了一下這段**,發現確實存在這個問題,但是這段**看起來並沒什麼錯誤啊。我的初步判斷是在關閉檔案後可能還需要什麼操作。於是我上網搜尋資料,搜了一陣子,終於找到一條:關閉流並不能改變流物件的內部狀態。如果最後的讀寫操作失敗了,物件的狀態將保持為錯誤模式,直到執行 clear 操作重新恢復流的狀態為止。呼叫 clear 後,就像重新建立了該物件一樣。如果程式設計師需要重用檔案流讀寫多個檔案,必須在讀另乙個檔案之前呼叫 clear 清除該流的狀態。
因此需要在呼叫檔案流物件的close函式後加一句**:infile.clear(ios::goodbit);就可以了,**如下:
string s;
vector vs;
ifstream infile("f://myreceivefiles//fillcompo_kp.mod", ios::in);
while (getline(infile, s))
vs.push_back(s);
coutinfile.clear(ios::goodbit);// ios::goodbit時表示無錯誤,可以繼續輸入或者操作
infile.open("f://myreceivefiles//fillcompo_line.mod", ios::in);
while (getline(infile, s))
vs.push_back(s);
infile.close();
cout 朱金燦 string s vector vs ifstream infile f myreceivefiles fillcompo kp.mod ios in while getline infile,s vs.push back s coutinfile.open f myreceivefiles... 朱金燦 string s vector vs ifstream infile f myreceivefiles fillcompo kp.mod ios in while getline infile,s vs.push back s coutinfile.open f myreceivefiles... 乙個朋友向我請教乙個程式,相關 如下 string s vector vs ifstream infile f myreceivefiles fillcompo kp.mod ios in while getline infile,s vs.push back s coutinfile.open f...ifstream類使用心得一則
ifstream類使用心得一則
ifstream類使用心得一則