fscanf无法读取/识别浮点数吗?

时间:2019-10-24 21:06:05

标签: c scanf

我正在尝试读取以下格式的文件:

 ID: x y z ...... other crap 

第一行如下:

 0: 0.82 1.4133 1.89 0.255 0.1563 armTexture.jpg 0.340 0.241 0.01389

我只需要x y z浮点数,其余的行就是垃圾。 我的代码当前如下所示:

int i;
char buffer[2];
float x, y, z;

FILE* vertFile = fopen(fileName, "r");      //open file
fscanf(vertFile, "%i", &i);                 //skips the ID number
fscanf(vertFile, "%[^f]", buffer);      //skip anything that is not a float (skips the : and white space before xyz)

//get vert data
vert vertice = { 0, 0, 0 };
fscanf(vertFile, "%f", &x);
fscanf(vertFile, "%f", &y);
fscanf(vertFile, "%f", &z);

fclose(vertFile);

为了调试它已经做了一些更改(最初的前两个scanfs使用*来忽略输入)。

运行此命令时,x,y,z不变。如果我做到

int result = fscanf(vertFile, "%f", &x);

结果是0,我相信这告诉我它根本没有将数字识别为浮点数吗?我尝试将xyz切换为double并也使用%lf,但这也不起作用。

我可能做错了什么?

1 个答案:

答案 0 :(得分:5)

%[^f]不会跳过非浮点,而是跳过非字母'f'的所有内容。

改为尝试%*d:*放弃读取的数字,而文字:则告诉它跳过冒号。您还可以合并所有这些单独的阅读。

fscanf(vertFile, "%*d: %f %f %f", &x, &y, &z);