2010-02-03 46 views
1

我是第二個OOP課程的編程學生,我的第一堂課是用C#教的,而這堂課是用C++教的。爲了讓我們的C++變得更加潮溼,我們的教授要求我們用File I/O編寫一個相當大的程序。問題是,我的程序中有一小部分不起作用,至少不適合我。該項目要求我們編寫一個循環來測試文件是否可以成功打開,並且我寫的循環似乎沒有工作。C++中的簡單文件I/O - 永不退出此循環?

我沒有收到任何編譯器錯誤,但是當我輸入文件的路徑時,無論是相對還是絕對,它都表示它是無效的。我有一種感覺,它與我的do-while循環中的條件有關,但我無法確定它的位置。

我並不是說要把我的作業帶到SO上,但是我一直在摸我的腦袋兩個多小時,而我似乎無法弄清楚這一點。

你介意幫我修理我的循環嗎?也許可以解釋我做錯了什麼?我想學習。

謝謝!

代碼:

Rainfall rData; 
ifstream actualReader; 
ifstream averageReader; 
string aRDataLoc; 
char response = 'a'; 
const int KILL_VALUE = 1; 
double actualRainfallD; 
double actualRainfallPassedArray[ARRAY_CAPACITY]; 
double averageRainfallPassedArray[ARRAY_CAPACITY]; 
int i = 0; 

do 
{ 
    actualReader.clear(); 
    cout << "\nPlease enter in the path to the file containing the actual rainfall data." << endl; 
    cout << "Path to file: "; 
    cin >> aRDataLoc; 
    actualReader.open(aRDataLoc.c_str()); 
     if (!actualReader.is_open()) 
      { 
      cout << "Invalid file path! Would you like to enter in a new file path?(y/n): "; 
      cin >> response; 
      if (response == 'n') { exit(KILL_VALUE); } 
    } 
}while (!actualReader.is_open() && response == 'y'); 
+0

如果我們看不到所聲明的變量,這無能爲力。 – Hogan 2010-02-03 04:06:16

+0

好的,我會補充一點。謝謝。 – Alex 2010-02-03 04:06:38

+1

它對我來說工作得很好。如果我輸入一個不存在的文件名,它會提示是否繼續。如果我輸入一個現有的文件名,它將退出。這不是你想要的嗎? – codaddict 2010-02-03 04:11:40

回答

1

我不知道您要輸入的輸入是cin,但請注意cin將停在遇到的第一個空格字符處。例如,如果你給輸入以下內容:

C:\Program Files\directory 

然後aRDataLog將具有值C:\Program

爲了讀取整行,您可以使用getline

還請檢查this post

+0

+1。另外值得注意的是,'std :: cin'不知道或尊重劃分路徑的正常方式(帶有「s」)。 – 2010-02-03 04:59:10

+0

謝謝!Cin在我的'visual studio 2008'目錄下停止空白。非常感謝許多! – Alex 2010-02-03 15:40:14

0

你需要把actualReader.close呼叫其他人,因爲該文件有打開的句柄,它不適用於再次打開

1

儘管我並不完全確定問題出在哪裏,但打印從std::cin得到的內容可能是個好主意,以確保您獲得所期望的結果。