我试图将一些数据从文件中输入到结构中。 我在不同的程序中使用了相同的精确代码,它应该工作吗? 我不知道我哪里错了。 下面的代码不能工作吗?也许我对sscanf并不熟悉。我想要一些帮助。谢谢。
The txt file is like this:
foo.var 1241
poa.org 421
aeraf.gr 5456
oiggdf.po 98843
代码:
struct filedata
{
char fname[50];
int fsize;
};
int main()
{
char line[60];
int i=0;
int numberoffiles=0;
int lines=0;
int ch=0;
FILE *fp = fopen("mytext.txt","r");
while ((ch = fgetc(fp)) != EOF)
{
if (ch == '\n')
lines++;
}
struct filedata file[lines];
numberoffiles=lines + 1;
if(fp == (FILE*)NULL)
{
fprintf(stderr,"Cannot Open File\n");
exit (-1);
}
else
{
while (fgets(line,60,fp)!=NULL)
{
sscanf(line,"%s %d",file[i].fname,&file[i].fsize);
i++;
}
}
}
答案 0 :(得分:0)
计算行数的循环读取整个文件,以便当您开始第二个循环时当前位置位于文件的末尾。考虑在第二个循环之前使用rewind()
移回文件的开头。
此外,您fp
调用后,您的测试是open()
是否为NULL。否则,读取行数的代码将失败。