我需要从文件中读入三个变量的值,然后将其用于执行计算。 这些值以特定格式列出。例如,以下是一个此类文件的内容:
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
我不知道为什么最后两个变量的值读取不正确。我将不胜感激你的建议。
谢谢。
最佳答案
我不确定是这样,但从您的示例文件来看,第二组数据似乎是整数而不是浮点值。不过,在您的代码中,您正在编写
for (unsigned int i = 0; i < nItems; i++)
{
fscanf(file, "%f\n", &v1[i]);
}
也就是说,您正在使用用于 float 的 %f
说明符来读取它们。如果 v1
和 v2
数组是 int
数组,则此方法将无法正常工作;它将用被解释为 float 的位模式覆盖整数。
要解决此问题,请尝试编写以下内容:
for (unsigned int i = 0; i < nItems; i++)
{
fscanf(file, "%d\n", &v1[i]);
}
即,使用 %d
说明符。
再说一次,这可能完全不对,因为我看不到更多的代码,但如果我不得不猜测这就是我投入资金的地方。如果这不正确,请告诉我,我可以删除这篇文章。
关于c - 从文件中读取值 - 有些是正确的,有些是不正确的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4988733/