如何阅读C

时间:2016-06-15 12:03:38

标签: c scanf fgetc

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

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.我刚刚发布了它的一部分。其他部分有浮点,这里不是指数。

2 个答案:

答案 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