c - 我如何用逗号分隔的文件中的 double 值填充我的数组

标签 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 循环会用数字填充数组,我认为使用“%f”会将其变成 double ,忽略逗号并将其放入数组,但它什么也没做。 编辑:所以我的“%f”应该是“%1f”,而不是应该保留里面的逗号吗?

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

感谢任何帮助。

最佳答案

问题是用法%ffscanf(fp, "%f,", &Array[i]);而不是 %lf .

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

%f%lfprintf() 的情况下可以互换使用但不是 scanf() .

float printf() 的参数将自动转换为 double无论如何,由于函数参数的默认类型提升。 参见 herehere .

但在 scanf() 的情况下,参数都是地址,因此没有类似的提升。因此 %lf将使scanf()使用 sizeof(double)字节和一个 %f会考虑 sizeof(float) .

观看演示 ​​here .

关于c - 我如何用逗号分隔的文件中的 double 值填充我的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46475271/

相关文章:

.net - C#Decimal.GetHashCode()和Double.GetHashCode()等于

c - c99 中的静态结构初始化

c - 来自 C 中输入文件的垃圾值

arrays - 在numpy中创建具有不同维度的数组数组

JavaScript 固定数组或对象长度?

java - 使用具有更多数字的 Java Double.toString() 样式格式(DecimalFormat 不适用于低精度数字)

C 程序不打印值

c - 用于 Delphi ShareMem 应用程序的 GCC dll

c - ‘unary *’ 的类型参数无效(有 ‘int’ )

javascript - 用数组和循环简化一些jquery