我正在尝试使用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
.........
我不知道如何调试它。谁能帮我? 谢谢!
答案 0 :(得分:3)
最简单的调试方法(如果你在最近的Windows上)是download并安装免费版的Visual Studio并按F5。
第二种最简单的方法是插入显示变量状态等的调试输出。
阻止调试需求的最佳方法是检查程序中重要步骤的成功; ifstream
转换为bool,表示流是否状态良好。它可以像if( !input_file ) { fprintf(stderr, "Could not open file\n"); }
一样使用。
在您的具体案例中引起我注意的一件事是您将文件名放在单引号中。这编译了吗?在任何情况下都要尝试使用双引号,并确保使用双反斜杠进行Windows目录分隔。经常出现的一个问题是,并不总是清楚哪个目录是程序的工作目录(这会影响相对路径的含义);使用像"c:\\myfile.txt"
这样的绝对路径是明确的。如果无法打开文件,则尝试从该流中读取将失败并且x
将保留其原始值(未定义,“随机”,因为您不初始化它)值。
访问未初始化的变量通常是未定义的行为。也就是说,程序可以合法地崩溃,或者在这种情况下,显示一个看似任意的值。