所以我需要打开一个看起来像这样的文本:
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);
感谢任何帮助。
最佳答案
问题是用法%f
在fscanf(fp, "%f,", &Array[i]);
而不是 %lf
.
printf()
和 scanf()
都是可变函数。
%f
和 %lf
在 printf()
的情况下可以互换使用但不是 scanf()
.
float
printf()
的参数将自动转换为 double
无论如何,由于函数参数的默认类型提升。
参见 here和 here .
但在 scanf()
的情况下,参数都是地址,因此没有类似的提升。因此 %lf
将使scanf()
使用 sizeof(double)
字节和一个 %f
会考虑 sizeof(float)
.
观看演示 here .
关于c - 我如何用逗号分隔的文件中的 double 值填充我的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46475271/