我必须将每个数据存储在一个数组中。如何从文件中读取这些数据?
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
数据是整数,浮点数和指数的混合。连续数据之间的空格不是常数,因此我不能使用简单的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.我刚刚发布了它的一部分。其他部分有浮点,这里不是指数。
答案 0 :(得分:0)
此程序从文件中读取并将标记转换为浮点数。您应该阅读整行并对其进行标记。然后你只需要创建一个数组并在代码中的正确位置添加数组。
#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;
}
<强> data.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
答案 1 :(得分:0)
尝试下面的代码,它会将输入文件中的所有数字读取为双倍。
数字之间的空格无关紧要。
#include<stdio.h>
#include<stdlib.h>
int main(){
FILE * fp;
double num;
fp = fopen("input.txt", "r");
if (fp == NULL){
printf("Unable to open file, terminating ...");
exit(1);
}
else {
while( fscanf(fp, "%lf", &num) == 1){
printf("%lf %e\n", num, num);
}
fclose(fp);
}
return 0;
}
input.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 17.3 16.55511
-5.0000000000000000E-01
<强>输出:强>
120.000000 1.200000e+02
0.500000 5.000000e-01
-0.500000 -5.000000e-01
0.500000 5.000000e-01
0.500000 5.000000e-01
-0.500000 -5.000000e-01
-0.500000 -5.000000e-01
0.500000 5.000000e-01
-0.500000 -5.000000e-01
0.166667 1.666667e-01
0.500000 5.000000e-01
-0.500000 -5.000000e-01
-0.166667 -1.666667e-01
17.300000 1.730000e+01
16.555110 1.655511e+01
-0.500000 -5.000000e-01