如何用逗号分隔的文件中的双打填充我的数组

时间:2017-09-28 17:38:50

标签: c arrays double fopen argv

所以我需要打开一个看起来像这样的文本:

45.687794,-785.645682
13.168486,-946.132461
94.138467,-456.48796
65.111158,-179.648315

并将它们放入一个数组中,以便我的当前代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, char *argv[])
{
    FILE *fp;
    fp = fopen(argv[1], "r");
    double Array[8];

如何在浏览文件并跳过逗号时将每个数字都放入数组中? 我相信我需要在某些时候使用atof将它从char变为double,并且我尝试使用do-while循环。

我期望do-while循环会用数字填充数组,我想用&#34;%f,&#34;将它变为双精度,忽略逗号并将其放入数组,但它没有做任何事情。 编辑:所以我的&#34;%f,&#34;应该是&#34;%1f,&#34;相反,内部的逗号应该保留吗?

i = 0;
    do
    {
       fscanf(fp, "%f,", &Array[i]);
        i++;
    }
while (i < 8);

我感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

问题是%f中的使用fscanf(fp, "%f,", &Array[i]);而不是%lf

printf()scanf()都是可变函数。

%f但不是%lf的情况下,

printf()scanf()可以互换使用。

由于函数参数的默认类型提升,float

printf()参数无论如何都会自动转换为double。 请参阅herehere

但是在scanf()的情况下,参数都是地址,因此没有类似的促销。因此,%lfscanf()使用sizeof(double)字节而%f会考虑sizeof(float)

查看演示here