close
延續上一篇。學妹在 while 迴圈中,想透過輸入的方式取得檔案名稱,利用一個 ifstream 物件重覆的開啟關閉,但是第二次迴圈就會開啟檔案失敗。程式碼如下:

ifstream ifs;
string filename, buffer;

for (;;) {
cin >> filename;
ifs.open(filename.c_str());
if (ifs.fail()) {
// fail
}

while (ifs >> buffer) {
// do something
}
ifs.close();
}


解決方法很解單。因為在 while (ifs >> buffer) 這段結束之後,ifs 物件的 failbit 就被設成 1 了。因此重新開啟時無論如何都會失敗。要重覆使用 ifs 物件,就要在重覆使用之前將狀態旗標清掉就行了。參考下面程式碼:


ifstream ifs;
string filename, buffer;

for (;;) {
cin >> filename;
ifs.open(filename.c_str());
if (ifs.fail()) {
// fail
}
while (ifs >> buffer) {
// do something
}
ifs.close();
ifs.clear();
}
arrow
arrow
    全站熱搜

    zxlin 發表在 痞客邦 留言(0) 人氣()