2013-06-12 83 views
1

我需要用戶輸入文件,只要用戶輸入存在的文件,文件將循環。當用戶輸入一個不存在的文件時,程序將中斷。如何創建一個檢查用戶輸入以查看它是否爲現有文件的循環?

#include <iostream> 
#include <fstream> 
using namespace std; 

int main() 
{ 
    string currentfile; 
    int i = 0; 
    do { 
     cout << "Please enter a file name \n"; 
     cin >> currentfile; 
     cout << currentfile << "\n"; 
     ifstream myfile(currentfile); 
     if (myfile.good()) 
     { 
      // display thenumber of characters, words, and lines in that file 
      myfile.close(); 
     } 
     else { 
      cout << "break"; 
      break; 
     } 
     i++; 
    } while(true); 
    // repeat while user enters valid file name 
} 

當我進入存在,myfile.good()回報好,然後,如果我嘗試並不真正存在再等等myfile.good()回報文件的文件。如果我啓動該程序,並且首先嚐試不存在的文件then myfile.good()返回false。

我不知道爲什麼我輸入一個有效的文件myfile.good()將繼續返回true。

回答

2

要檢查這是什麼:

ifstream myfile(currentfile); 
if (myfile) // myfile.is_open() is fine too... 
{ 
    // display thenumber of characters, words, and lines in that file 
    myfile.close(); 

} 
else { 
    cout << "break"; 
    break; 
} 

好():

檢查流是否已準備好輸入/輸出 操作,其他成員函數存在檢查特定狀態 的一個流(它們都返回一個bool值)

它檢查狀態標誌。

要測試如果一個文件被成功打開,你可以使用:

myfile.is_open() 

然後,如果是,你會執行像檢查:EOF(),...,還是不錯的()。

實施例:

ifstream myfile(currentfile); 
if (myfile.is_open()) 
{ 
    while (myfile.good()) // while (!myfile.eof()), ... 
    { 
     getline (myfile,line); 
     cout << line << endl; 
    } 
    myfile.close(); 
} 

This的更多細節。

+0

這主要是我的問題是關於和我不能弄清楚的問題。 – user1082764

+1

很可能,如果您從有效文件開始,然後更改爲無效文件,則該流仍然可以用於I/O。我會考慮一個bug,但是,嘿,C++。 – 2rs2ts

+1

是的,就是這樣。 'good()'只在以下任何一個返回true時返回false:'bad()','fail()'和'eof()'。 'fail()'是'bad()'的超集,如果r/w操作失敗或發生格式錯誤,則返回true - 這將在無效文件中發生,但顯然該標誌不會被重新設置。使用'clear()'重置標誌。 – 2rs2ts

相關問題