簡體   English   中英

在C編程中,如何從文本文件中讀取數據數組?

[英]How can I read an array of data from a text file in my code in C programming?

我有一個代碼可以讀取包含大量數字的文本文件。 我使用下面的代碼來訪問它,但這僅占第一行。

我還有其他99行要訪問的數據。 如何使其讀取其他99行數據?

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

正如elia在評論中提到的那樣,最好的策略是讀取整行,然后使用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_line看起來像這樣:

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

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

    return c != EOF;
}

這個:

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++;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM