2017-04-03 46 views
-1

我試圖創建一個程序讀取三個點(巫形成一個三角形)從這樣給出b.txt文件:
(-3,-3) (4,-5.5) (-2,1)
後來我需要計算三角形面積(本例中P = 15.25)。
我的代碼:從txt文件讀取的十進制數和用C使用它們

#include <stdio.h> 
int main() 
{ 
FILE *fp=fopen("b.txt","r"); 
int i=0; 
float x[3],y[3]; 
char bracket,comma; 
while(fscanf(fp,"%c%f%c%f%c",&bracket,&x[i],&comma,&y[i],&bracket)==5) 
    i++; 
for(i=0;i<3;i++) 
    printf("%f %f\n",x[i],y[i]); 
fclose(fp); 
return 0; 
} 

結果我得到:
0.000000 1102137707490764237397621571846144.000000 0.000000 0.000000 0.000000 0.000000

誰能給我一個想法如何閱讀這些數字呢? 在此先感謝! PS 我知道如何用fgetc讀取數字(用char),但後來我不能用它們來計算三角形區域。

+0

'的fscanf(FP, 「%c%f%c%f%c」,&bracket,&x [i],&comma,&y [i],&bracket)'對我來說看起來像是UB ......你傳遞兩次相同的指針'&bracket'。 –

+0

@EugeneSh。我使用該支架只是爲了跳過這種情況下的垃圾桶支架 –

+0

@xing仍然不能正常工作 –

回答

0

如果你的行格式是固定的,像可以使工作:

#include <stdio.h> 

struct point { 
    float x; 
    float y; 
}; 

int main() { 
    FILE *fp = fopen("b.txt", "r"); 
    int i = 0; 
    struct point p[3]; 
    char bracket, comma; 

    fscanf(fp, "(%f,%f) (%f,%f) (%f,%f)", &p[0].x, &p[0].y, &p[1].x, &p[1].y, 
      &p[2].x, &p[2].y); 

    for (int j = 0; j < 3; j++) { 
     printf("%.2f %.2f\n", p[j].x, p[j].y); 
    } 

    fclose(fp); 
    return 0; 
} 

爲了瞭解代碼我建議你去看一下fscanf文檔

相關問題