结构sscanf不能正常工作?

时间:2014-01-17 18:18:37

标签: c file struct fgets scanf

我试图将一些数据从文件中输入到结构中。 我在不同的程序中使用了相同的精确代码,它应该工作吗? 我不知道我哪里错了。 下面的代码不能工作吗?也许我对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++;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

计算行数的循环读取整个文件,以便当您开始第二个循环时当前位置位于文件的末尾。考虑在第二个循环之前使用rewind()移回文件的开头。

此外,您fp调用后,您的测试是open()是否为NULL。否则,读取行数的代码将失败。