C ++ ifstream错误:无法读取数据

时间:2018-04-25 06:43:46

标签: c++ fstream

我正在尝试使用fstream读取数据集文件(空格分隔数字,如0.5678),但它无法读取数据集并为所有数据条目返回相同的奇怪值

ifstream input_file('Data_file');

for (int j = 1; j <= dimension; j++){
    for (int i = 1; i <= no_of_data_points; i++){
        double x;
        input_file >> x;
        cout << x << endl;
    }
}

上面的代码返回,

-9.25596e+61
-9.25596e+61
-9.25596e+61
-9.25596e+61
-9.25596e+61
-9.25596e+61
-9.25596e+61
-9.25596e+61
-9.25596e+61
-9.25596e+61
-9.25596e+61
-9.25596e+61
-9.25596e+61
-9.25596e+61
.........

我不知道如何调试它。谁能帮我? 谢谢!

1 个答案:

答案 0 :(得分:3)

最简单的调试方法(如果你在最近的Windows上)是download并安装免费版的Visual Studio并按F5。

第二种最简单的方法是插入显示变量状态等的调试输出。

阻止调试需求的最佳方法是检查程序中重要步骤的成功; ifstream转换为bool,表示流是否状态良好。它可以像if( !input_file ) { fprintf(stderr, "Could not open file\n"); }一样使用。

在您的具体案例中引起我注意的一件事是您将文件名放在单引号中。这编译了吗?在任何情况下都要尝试使用双引号,并确保使用双反斜杠进行Windows目录分隔。经常出现的一个问题是,并不总是清楚哪个目录是程序的工作目录(这会影响相对路径的含义);使用像"c:\\myfile.txt"这样的绝对路径是明确的。如果无法打开文件,则尝试从该流中读取将失败并且x将保留其原始值(未定义,“随机”,因为您不初始化它)值。

访问未初始化的变量通常是未定义的行为。也就是说,程序可以合法地崩溃,或者在这种情况下,显示一个看似任意的值。