Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sscanf有什么问题?_C - Fatal编程技术网

sscanf有什么问题?

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

我正在尝试扫描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++;
    }
    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: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)。为什么首先需要浮点数?在读取了
float variable
中的值之后,是否要使用这些浮点数?@sameerkn是的,我实际上正在扫描几个点的x和y坐标。因此,%.3f并不完全是我想要的,因为它可能会变化。在读取了
浮点变量中的值之后,是否要使用这些浮点值?@sameerkn是的,我实际上正在扫描几个点的x和y坐标。所以,%.3f并不完全是我想要的,因为它可能会变化。