我必须从txt文件读取数据,如下所示:


11 27 12 OY-5158
11 28 12 WM-2037
12 29 46 PY-6651


最后一部分必须在字符串中,它始终具有7个字符。

我尝试了这个:

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

int main()
{
    int i;
    int sorok;
    char s[1000];   //Max number of lines

    FILE *f = fopen("jarmu.txt","r");

    while( (fgets(s, sizeof(s), f)) != NULL) {
      sorok++;
    }

    int idopont[sorok][3];
    char rendszam[sorok][7];

    while (!feof(f))
    {
        for(i=0; i<sorok; i++)
        fscanf(f,"%d %d %d %7s",&idopont[i][0],&idopont[i][1],&idopont[i][2],&rendszam[i]);
    }

    for(i=0; i<sorok; i++)
    printf("%d %d %d %7s\n",idopont[i][0],idopont[i][1],idopont[i][2],rendszam[i]);

    return 0;
}


但这是行不通的。你能帮我吗?

最佳答案

您的问题很简单:

此刻,您读取文件一次以获取行数,然后再次解析这些行。您忘记了之间的倒带。使用:fseek(f, 0, SEEK_SET);

另外,请不要忘记删除包含while(!feof(f))循环的正文。

或者,仅读取文件一次,然后直接解析各行。

下一个问题点:C使用0终止的字符串,并且您没有为0终止保留空间。请也进行更正。

最终错误:fscanf(f,"%d %d %d %7s",&idopont[i][0],&idopont[i][1],&idopont[i][2],&rendszam[i]);
应为fscanf(f,"%d %d %d %7s",&idopont[i][0],&idopont[i][1],&idopont[i][2],rendszam[i]);
类型应为FILE*, char*, int*, int*, int*, char*。最后一个是char**

07-28 07:38