我想扫描数据文件中的“G1”,然后在浮点数中给出X,Y和Z坐标,但坐标用不同的小数位数表示。三线文件可能看起来像,其中第一和第三包含坐标:如何在不知道浮子长度的情况下fscanf?
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 ++;
}
我想,这大概比我的解决方案更强大的... – Floris