sscanf有什么问题?
我正在尝试扫描csv文件。 这是代码sscanf有什么问题?,c,C,我正在尝试扫描csv文件。 这是代码 FILE *fp; float pts[1000][2]; char line[1000]; int n = 0; fp = fopen("abc.csv","r"); n = 0; while(fgets(line, sizeof line, fp)) { sscanf(line,"%f,%f",&pts[n][0],&pts[n][1]); n
FILE *fp;
float pts[1000][2];
char line[1000];
int n = 0;
fp = fopen("abc.csv","r");
n = 0;
while(fgets(line, sizeof line, fp))
{
sscanf(line,"%f,%f",&pts[n][0],&pts[n][1]);
n++;
}
for(i=0;i<n;i++)
printf("%f, %f\n",pts[i][0],pts[i][1]);
当我打印时,我得到的输出是
11.654000, 22.332001
11.654000, 22.332001
11.654000, 22.332001
额外的.000001是从哪里来的
感谢您的帮助。提前谢谢。与scanf无关。这是因为
float
在内存中的表示/存储方式
请尝试以下操作:
float x = 22.332;
printf("%f\n", x);
你会看到结果是一样的
请看:与scanf无关。这是因为
float
在内存中的表示/存储方式
请尝试以下操作:
float x = 22.332;
printf("%f\n", x);
你会看到结果是一样的
请看:浮点数字存储在内存中,使用IEEE-754(单或双)等标准,这些标准不能代表您期望的每个浮点数字,因为它们是浮点。浮点存储的精度不是恒定的,所以他们尝试将数字四舍五入到能够存储的最接近的数字 另外,printf中%f的默认精度为6,您可以将其设置为3
printf("%.3f, %.3f\n",pts[i][0],pts[i][1]);
浮点数是使用IEEE-754(单或双)等标准存储在内存中的,这些标准不能代表您期望的每个浮点数,因为它们是浮点。浮点存储的精度不是恒定的,所以他们尝试将数字四舍五入到能够存储的最接近的数字 另外,printf中%f的默认精度为6,您可以将其设置为3
printf("%.3f, %.3f\n",pts[i][0],pts[i][1]);
那我怎么才能得到22.332呢@Apy:try
printf(“%.3f,%.3f\n”,pts[i][0],pts[i][1])代码>使用任意精度的十进制
库,如GNU MPFR。如果它不是一个过击。或使用double
而不是float。这也不是很精确,但tge错误要小得多,并且在默认输出精度下看不到它。@Apy要精确获得22.332,只需执行int n=22332;printf(“%d.%d”,n/1000,n%1000)代码>。为什么你首先需要浮点数?那我怎么才能得到22.332呢@Apy:tryprintf(“%.3f,%.3f\n”,pts[i][0],pts[i][1])代码>使用任意精度的十进制
库,如GNU MPFR。如果它不是一个过击。或使用double
而不是float。这也不是很精确,但tge错误要小得多,并且在默认输出精度下看不到它。@Apy要精确获得22.332,只需执行int n=22332;printf(“%d.%d”,n/1000,n%1000)代码>。为什么首先需要浮点数?在读取了float variable
中的值之后,是否要使用这些浮点数?@sameerkn是的,我实际上正在扫描几个点的x和y坐标。因此,%.3f并不完全是我想要的,因为它可能会变化。在读取了浮点变量中的值之后,是否要使用这些浮点值?@sameerkn是的,我实际上正在扫描几个点的x和y坐标。所以,%.3f并不完全是我想要的,因为它可能会变化。