2016-03-29 235 views
1

我現在真的很掙扎,原本有eclipse本身的其他問題,似乎已經解決了。代碼看起來對我來說(與用於加載文件的示例代碼相比),但是我無法加載任何內容,因爲我放入的錯誤始終被觸發。沒有建築錯誤atm。我究竟做錯了什麼?試圖同時使用eclipse(mac)和Code :: blocks(win vm),兩者似乎都有問題。數據文件本身與.cpp文件位於同一文件夾中。無法打開文件C++

#include <iostream> 
#include <string> 
#include <math.h> 
#include <fstream> 
using namespace std; 

int main() { 
    cout << "Choose which data file to load (1-4)" << endl; 
    int file; 
    cin >> file; 
    ifstream data; 

    switch (file) { 
     case 1: 
      data.open("dataSet1.txt"); 
     case 2: 
      data.open("dataSet2.txt"); 
     case 3: 
      data.open("dataSet3.txt"); 
     case 4: 
      data.open("dataSet4.txt"); 
    } 

    if (!data) { 
     cerr << "File not Loaded" << endl; 
     return -1; 
    } 

    string FullData[61]; 
    for (int i=0; i=60; i++){ 
     data >> FullData[i]; 
     cout << FullData[i] << endl; 

    } 

    return 0; 
} 

編輯:得到了程序停止顯示錯誤,它似乎被加載的文件,但是我分配/顯示循環似乎沒有現在的工作,因爲它只會顯示最後一個數據點上並重新開始。

+2

這樣寫的文件需要與_executable_相同的文件夾中,而不是.cpp – Nacho

+2

您是否故意將'break'語句退出? – callyalater

+2

我不確定它是否會導致失敗,但在任何情況下,除了「4」,您將多次調用在流上打開而不關閉流。 – NathanOliver

回答

-2

必須在每個情況下 等之後有break語句:

case1://something; 
      break; 

,你必須關閉緊密()函數的流

data.close(); 
+0

這仍然不能解釋爲什麼程序無法加載數據集。 – callyalater

+0

加入了這兩件事(每種情況下休息)沒有區別,仍然不會加載文件。 –

+0

你還沒有指定一個路徑@DariaD它必須像data.open(「C:\ Users \ Desktop \ dataset1.txt」);並添加data.close();在返回聲明之前。 – Ajay

3

的數據文件本身是在同一文件夾作爲.cpp文件

正在sa我的文件夾爲.cpp並不重要,數據集文件應與編譯的二進制程序位於同一文件夾中。

也可能是工作目錄設置不指向數據集文件所在的目錄。所有傳入open成員函數的是string,這意味着解釋該字符串的含義取決於環境設置。

+0

這看起來像是問題的真正原因。編譯後的程序將採用'open'方法的字符串輸入,並在可執行文件的'.DATA'或'.TEXT'部分創建一個條目。最終的可執行文件將不知道字符串的實際含義。環境將有助於指導程序在何處查看所提供的字符串。 – callyalater