2016-03-29 237 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