我有一个多行文件。第一行包含一个整数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世纪教科书中的遗物。 –