c - 从文件中读取值 - 有些是正确的,有些是不正确的

标签 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

我不知道为什么最后两个变量的值读取不正确。我将不胜感激你的建议。

谢谢。

最佳答案

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

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

也就是说,您正在使用用于 float 的 %f 说明符来读取它们。如果 v1v2 数组是 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/

相关文章:

c - fputs( _ ("") ) 下划线代表什么?

c++ - 在我的 linux 中调用了哪个版本的 close(),来自 posix lib 还是内核?

java - 为什么Java不支持C中的clrscr之类的函数?

c++ - 需要找到一种使用 OpenCV 在二维图像中检测息肉的方法

c - C代码输出说明

c - 删除使用 lua_newuserdata 分配的内存

检测到 C 堆栈崩溃

将指针及其地址转换为整数指针

c - Valgrind:大小为 8 的无效读/写

c - 如何将“放在C中的字符串内