从文件中读取值 - 一些是正确的,另一些是不正确的

时间:2011-02-14 04:02:19

标签: c

我需要读取文件中三个变量的值,然后用于执行计算。 值以特定格式列出。例如,这些是一个这样的文件的内容:

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

我不知道为什么最后两个变量的值被错误地读取。我很感激你的建议。

感谢。

1 个答案:

答案 0 :(得分:0)

我不确定是不是这样,但是从你的示例文件看,它看起来像第二组数据是整数而不是浮点值。但是,在你的代码中,你正在编写

for (unsigned int i = 0; i < nItems; i++)
{    
    fscanf(file, "%f\n", &v1[i]);   
} 

也就是说,您正在使用%f说明符来读取它们,这是用于浮点数的。如果v1v2数组是int的数组,则无法正常工作;它将使用意图被解释为浮点数的位模式覆盖整数。

要解决此问题,请尝试编写此代码:

for (unsigned int i = 0; i < nItems; i++)
{    
    fscanf(file, "%d\n", &v1[i]);   
} 

即,使用%d说明符。

同样,这可能完全关闭,因为我看不到更多的代码,但如果我不得不猜测这是我放钱的地方。如果这不正确,请告诉我,我可以删除这篇文章。