我有一個多行文件。第一行包含一個整數N,後面緊跟着N行,其中每行包含一對由空格分隔的浮點數。每個浮點數都有兩個十進制數字。現在我有以下簡單的代碼,它將浮點數存儲在內存中並將它們打印出來。使用fscanf從文件中讀取浮動文件
#include <stdio.h>
#include <stdlib.h>
struct coordinates {
float x;
float y;
};
typedef struct coordinates coords;
int main(int argc, char** argv) {
unsigned int N, i;
coords *points;
FILE *fp;
if (argc != 2) {
printf("Usage: ./bigCircle <input_file>\n");
exit(0);
}
fp = fopen(argv[1], "r");
N = fscanf(fp, "%u", &N);
points = (coords *)malloc(N*sizeof(coords));
for (i=0; i<N; i++) {
fscanf(fp, "%f %f", &points[i].x, &points[i].y);
printf("%f %f\n", points[i].x, points[i].y);
}
return 0;
}
的問題是,印刷浮體具有多得多的非零十進制數字,併成爲是正確的,只有當四捨五入到小數點後第二位。例如,對於一對
99999.72 -50167.43
我的程序打印
99999.718750 -50167.429688
這究竟是爲什麼?爲什麼我沒有得到
99999.720000 -50167.430000
?
因此不能表示激動,你會得到這樣的值。 – ameyCU
輸入文件?但答案很簡單:浮點數並不準確。 – 4386427
如果你把'float'放在bin中並且開始使用'double',這當然不會那麼糟糕。在這種情況下,你必須使用'浮動',但通常它們是20世紀教科書中的遺物。 –