我正在尝试读取以下格式的文件:
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,但这也不起作用。
我可能做错了什么?
答案 0 :(得分:5)
%[^f]
不会跳过非浮点,而是跳过非字母'f'
的所有内容。
改为尝试%*d:
。 *
放弃读取的数字,而文字:
则告诉它跳过冒号。您还可以合并所有这些单独的阅读。
fscanf(vertFile, "%*d: %f %f %f", &x, &y, &z);