【发布时间】:2013-11-28 16:05:01
【问题描述】:
我想扫描数据文件中的“G1”,然后是 X、Y 和 Z 坐标,以浮点数给出,但坐标用不同的小数位数表示。文件中的三行可能如下所示,其中第一行和第三行包含坐标:
G1X59.7421875Y60.2578125
M101S3F12
G1X50.25
有人知道如何fscanf 一个具有如此不可预测性质的浮点数吗?
当我查看结果(printf()'s)时,数字与文件不匹配。我希望 fscanf 扫描“通过”短浮动,因为它们没有被打印出来。
我的遍历代码:注意对find_arg()的函数调用,我认为问题出在哪里。
char line[LINE_LENGHT];
int G1, X, Y, Z, F, junk= 0;
float fdx, fdy, fdz;
while(!feof(file_gcode)){
for (i = 0; i < LINE_LENGHT; i++){
fscanf(file_gcode, "%c", &line[i]);
if ((line[i-1] == 'G')&&(line[i] == '1')) {
G1 ++;
while (line[i] != '\n'){
if( (line[i] == 'X') || (line[i]==('Y')) || (line[i]==('Z')) || (line[i] == ('F')) ) {
find_arg(line[i]);
}
i ++;
fscanf(file_gcode, "%c", &line[i]);
}
printf("X = %f, Y = %f, Z = %f \n", fdx, fdy, fdz);
}
}
}
printf("-------------------\n");
printf("G1's : %i\n", G1);
printf("X's : %i\n", X);
printf("Y's : %i\n", Y);
printf("Z's : %i\n", Z);
printf("F's : %i\n", F);
printf("other's : %i\n", junk);
printf("-------------------\n");
}
int find_arg(char c){
if (c == 'X'){
X ++;
fscanf(file_gcode, "%f", &fdx);
}
else if(c == 'Y'){
Y ++;
fscanf(file_gcode, "%f", &fdy);
}
else if(c == 'Z'){
Z ++;
fscanf(file_gcode, "%f", &fdz);
}
else if(c == 'F'){
F ++;
}
else junk ++;
}
【问题讨论】: