gpt4 book ai didi

c - 如何用C读取这些混合数据

转载 作者:行者123 更新时间:2023-11-30 21:39:13 24 4
gpt4 key购买 nike

我必须将每个数据存储在一个数组中。如何从文件中读取这些数据?

120 5.0000000000000000E-01   -5.0000000000000000E-01  5.0000000000000000E-01  
5.0000000000000000E-01 -5.0000000000000000E-01 -5.0000000000000000E-01
5.0000000000000000E-01 -5.0000000000000000E-01 1.6666666666999999E-01
5.0000000000000000E-01 -5.0000000000000000E-01 -1.6666666666999999E-01
-5.0000000000000000E-01

数据是整数、 float 和指数的混合。连续数据之间的空格不是恒定的,因此我不能使用简单的 fscanf()。我还必须将它们更改为整数,因此,我找不到 fscanf() 的替代方案,因为我可以在 fscanf() 参数中将类型说明符指定为 %e,然后将它们更改为整数。我也尝试过 fgetc() 。请告诉我一个方法。

编辑。

要使用 fscanf(),我需要在连续数据之间有恒定数量的空格或逗号或任何内容。这里,每个数据之间的空格数量不是恒定的。因此,我还需要在两者之间实现一个空格检查器。这就是我在某个部分使用 fgetc() 的原因。

#include<stdio.h>

int main()
{
int i=0,c,a[13];
FILE *fp;
fp=fopen("test.txt","r");
if(fp==NULL)
{
printf("Error");
}
else
{
i=0;
while(1)
{
c=fgetc(fp);
//printf("\nc = %c",c);
if(feof(fp))
{
break;
}
else if(c!=" ")
{
fscanf(fp,"%d",&a[i]);
printf("%d\n",a[i]);
i++;
}
}

}
fclose(fp);
return 0;
}

数据文件为 2 m.b。我刚刚发布了其中的一部分。其他部分有浮点,它们不是像这里那样的指数。

最佳答案

该程序从文件中读取并将标记转换为 float 。您应该阅读整行并将其标记化。然后你只需要创建一个数组并添加到代码中正确的位置即可。

#include <stdio.h>
#include <stdlib.h>
#include <memory.h>

int main(void) {
FILE *sp1;
char line[256];
double array[256];
int i = 0;

sp1 = fopen("data.txt", "r");
while (1) {
if (fgets(line, 150, sp1) == NULL) break;
char *p = strtok(line, " ");
while (p != NULL) {
double fd = atof(p);
array[i++] = fd;
p = strtok(NULL, " ");
}
}

for(int j=0;j<i;j++)
printf("%f\n", array[j]);

return 0;
}

数据.txt

120 5.0000000000000000E-01   -5.0000000000000000E-01  5.0000000000000000E-01
5.0000000000000000E-01 -5.0000000000000000E-01 -5.0000000000000000E-01
5.0000000000000000E-01 -5.0000000000000000E-01 1.6666666666999999E-01
5.0000000000000000E-01 -5.0000000000000000E-01 -1.6666666666999999E-01
-5.0000000000000000E-01

输出

120.000000
0.500000
-0.500000
0.500000
0.500000
-0.500000
-0.500000
0.500000
-0.500000
0.166667
0.500000
-0.500000
-0.166667
-0.500000

关于c - 如何用C读取这些混合数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37834937/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com