用C语言读取文件不是';不行吗?

用C语言读取文件不是';不行吗?,c,file,C,File,所以我试着四处看看,却找不到答案。我试图从另一个程序中写入的文件中读取数据。写它很好,但当我尝试阅读它时,根本没有输出。这是密码 struct data{ int tp, gpm, deg; }; int main() { struct data list[21]; int p[21]; list[0].tp = 10; FILE * fout; fopen("data_list", "r"); for(int i = 0; i <

所以我试着四处看看,却找不到答案。我试图从另一个程序中写入的文件中读取数据。写它很好,但当我尝试阅读它时,根本没有输出。这是密码

struct data{
    int tp, gpm, deg;
};

int main()
{
    struct data list[21];
    int p[21];
    list[0].tp = 10;
    FILE * fout;
    fopen("data_list", "r");
    for(int i = 0; i < 21; i++){
        fscanf(fopen, "%d:\t%d\t%d\t%d\n", &p[i], &list[i].tp, &list[i].gpm, &list[i].deg);
    }

    for(int i = 0; i < 21; i++){
        printf("%d:\t%d\t%d\t%d\n", p[i], list[i].tp, list[i].gpm, list[i].deg);
    }
    fclose(fout);
    return 0;
}
有人能帮我吗?我学C才几个月,大部分都是自学的

fscanf(fopen, "%d:\t%d\t%d\t%d\n"
我不知道它是如何编译的,但您正在传递一个函数指针,其中需要
文件*
。这肯定不会正常工作


正确的传递方式是调用
fopen()
的返回值(此时您正在丢弃该值)。

看起来您希望在fscanf中读取的选项卡不在输入文件中。write out=fopen(“数据列表”,“r”);并将fscanf()第一个参数保持为out。如@achal所述,
fopen
返回指向新打开文件的指针。然后将此句柄用作其他文件相关函数(如fscanf和fclose)的标识符。不要尝试使用
%d
格式说明符读取
scanf
中的空白。假设有两个标签?
%d
格式说明符(但不是全部)会自动过滤前导空格。
如果((fout=fopen(“data_list”,“r”)==NULL){exit(1);}
所以我用这个fscanf(fout,“%d%d%d%d”,&p[I],&list[I].tp,&list[I].gpm,&list[I].deg)调整了这一行(在实际查看了它之后,我也不敢相信它被编译了);但它还是什么也没给我。我还实际使用了fout,并用fout=fopen(“数据列表”,“r”)定义它;但它仍然不起作用。
fscanf(fopen, "%d:\t%d\t%d\t%d\n"