我必须从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**
。