我需要读取文件中三个变量的值,然后用于执行计算。 值以特定格式列出。例如,这些是一个这样的文件的内容:
2 //number of items per variable
0 0 0 //values for center locations (stored as struct)
0 0 .5
10 //values for some variable v1 (type double)
5
-10 //values for some variable v2 (type double)
10
这是我阅读这些值的代码:
...
fscanf(file, "%d\n", &nItems);
for (unsigned int i = 0; i < nItems; i++)
{
float cx, cy, cz;
fscanf(file, "%f %f %f\n", &cx, &cy, &cz);
center[i].cx = cx;
center[i].cy = cy;
center[i].cz = cz;
}
for (unsigned int i = 0; i < nItems; i++)
{
fscanf(file, "%f\n", &v1[i]);
}
for (unsigned int i = 0; i < nItems; i++)
{
fscanf(file, "%f\n", &v2[i]);
}
我面临的问题是,当我以这种方式读取值并输出它们时,nItems和中心位置的值是正确的,但其余的是不正确的。但是,这些值的符号和相对大小是正确的。例如,对于上面显示的值列表,这些是输出值:
Correct Outputted values
2 2
0 0 0 0.000000 0.000000 0.000000
0 0 .5 0.000000 0.000000 0.500000
10 524288.000000
5 2048.000000
-10 -524288.000000
10 524288.000000
我不知道为什么最后两个变量的值被错误地读取。我很感激你的建议。
感谢。
答案 0 :(得分:0)
我不确定是不是这样,但是从你的示例文件看,它看起来像第二组数据是整数而不是浮点值。但是,在你的代码中,你正在编写
for (unsigned int i = 0; i < nItems; i++)
{
fscanf(file, "%f\n", &v1[i]);
}
也就是说,您正在使用%f
说明符来读取它们,这是用于浮点数的。如果v1
和v2
数组是int
的数组,则无法正常工作;它将使用意图被解释为浮点数的位模式覆盖整数。
要解决此问题,请尝试编写此代码:
for (unsigned int i = 0; i < nItems; i++)
{
fscanf(file, "%d\n", &v1[i]);
}
即,使用%d
说明符。
同样,这可能完全关闭,因为我看不到更多的代码,但如果我不得不猜测这是我放钱的地方。如果这不正确,请告诉我,我可以删除这篇文章。