在C编程中,如何从代码中的文本文件中读取数据数组?

在C编程中,如何从代码中的文本文件中读取数据数组?,c,arrays,text,C,Arrays,Text,我有一个代码,读取一个文本文件,其中有一组数字。我使用下面的代码访问它,但这只抓住了第一行 我还有99行数据要访问。如何让它读取其他99行数据 fscanf(fp1,"%lf,%lf,%lf,%lf",&a,&b,&c,&d); 这: 提示输入文件中每行只有4个数字 (如果你按照桂林的思路去问问题,我们会帮你更多的忙,比如贴一个[mcve]) 张贴的代码表明: float a; float b; float c; float d; 行上的数字用逗号分隔 建议:

我有一个代码,读取一个文本文件,其中有一组数字。我使用下面的代码访问它,但这只抓住了第一行

我还有99行数据要访问。如何让它读取其他99行数据

fscanf(fp1,"%lf,%lf,%lf,%lf",&a,&b,&c,&d);
这:

提示输入文件中每行只有4个数字

(如果你按照桂林的思路去问问题,我们会帮你更多的忙,比如贴一个[mcve])

张贴的代码表明:

float a;
float b;
float c;
float d;
行上的数字用逗号分隔

建议:

#define MAX_LINES 100

float a[ MAX_LINES ];
float b[ NAX_LINES ];
float c[ MAX_LINES ];
float d[ MAX_LINES ];

size_t i = 0;
while( i<MAX_LINES && 4 == fscanf( fp1, "%lf,%lf,%lf,%lf", &a[i], &b[i], &c[i], &d[i] )
{ 
    // perhaps do something with the most recent line of data
    i++;
}
#定义最大行数100
浮动a[MAX_LINES];
浮动b[NAX_线];
浮点数c[最大线];
浮动d[最大线];
尺寸i=0;

正如elia在评论中提到的(i),最好的策略是通读整行 然后用
sscanf
解析它

char buffer[1024];
while(fgets(buffer, sizeof buffer, fp1))
{
    if(sscanf(buffer,"%lf,%lf,%lf,%lf",&a,&b,&c,&d) != 4)
    {
        fprintf(stderr, "Invalid line format, ignoring\n");
        continue;
    }

    printf("a: %lf, b: %lf, c: %ld, d: %lf\n", a, b, c, d);
}
另一种选择是继续阅读,直到
\n

while(1)
{
    if(fscanf(fp1,"%lf,%lf,%lf,%lf",&a,&b,&c,&d) != 4)
    {
        fprintf(stderr, "Invalid line format, ignoring\n");
        if(clear_line(fp1) == 0)
        {
            fprintf(stderr, "Cannot read from fp1 anymore\n");
            break;
        }
        continue;
    }

    printf("a: %lf, b: %lf, c: %ld, d: %lf\n", a, b, c, d);

    if(clear_line(fp1) == 0)
    {
        fprintf(stderr, "Cannot read from fp1 anymore\n");
        break;
    }
}
clear\u line
看起来是这样的:

int clear_line(FILE *fp)
{
    if(fp == NULL)
        return 0;

    int c;
    while((c = fgetc(fp)) != '\n' && c != EOF);

    return c != EOF;
}

您是否曾经尝试过从文件中逐行获取数据,并使用fscanf解析每行数据?正如我所提到的,还有99行数据需要处理。我不知道如何有效地执行您所提到的操作。
int clear_line(FILE *fp)
{
    if(fp == NULL)
        return 0;

    int c;
    while((c = fgetc(fp)) != '\n' && c != EOF);

    return c != EOF;
}