首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文件读写C

文件读写C
EN

Stack Overflow用户
提问于 2014-01-12 17:48:02
回答 1查看 142关注 0票数 0

我在读和写文件时遇到了问题。我使用fwrite并编写了大量的struct数组。之后,如果没有文件,我会写信给文件。

如果在文件的第一个字节上有多少胜利者在文件中定义,但我无法在文件中得到正确的数字,除非我手动打开它并写入例如3,那么它就会出现,否则它不会出现。

你能找到我的问题吗?

然后将vinnare[].name写为空,它不能使用NULL :/

代码语言:javascript
复制
struct vinnare{
    int ar;
    char namn[20];
};

    main(){
    int a, val, antalvinnareinlasning,test=0;

    struct vinnare *vinnare;

    FILE *file;
    file = fopen("F:\\Uppgifter.txt", "rt")
    if (file == NULL){
        printf("Hej2");
        vinnare = NULL;
        printf("Ange antal vinnare:");
        scanf("%d", &antalvinnareinlasning);
        vinnare = (struct vinnare *)malloc(antalvinnareinlasning*sizeof(struct vinnare));
        vinnare = inlasningTillFil(vinnare, antalvinnareinlasning);
    }
    else{
            **fscanf(file, "%b", &test);
            printf("%d",test);**

        fflush(stdin);
        getchar();

    }
}


struct vinnare *inlasningTillFil(struct vinnare *vinnare, int antalvinnareinlasning){
    int a, temp;

    FILE *file;
    file = fopen("F:\\Uppgifter.txt", "wt");
    **vinnare[0].ar = antalvinnareinlasning;**
    **strcpy(vinnare[0].namn, "");**                         //What should it say to make it empty?
    **fwrite(&vinnare[0], sizeof(struct vinnare),1, file);**


    for (a = 1; a < (antalvinnareinlasning + 1); a++){
        printf("year: ");
        scanf("%d", &temp);
        vinnare[a].ar = temp;
        fflush(stdin);

        printf("Winner that year:");
        fgets(vinnare[a].namn, 40, stdin);
        fflush(stdin);

        fwrite(&vinnare[a], sizeof(struct vinnare),1, file);
    }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-12 17:55:42

fscanf解析字符串(通常用fprintf编写);fread读取二进制数据(通常用fwrite编写)。你把fscanffwrite配对了。

%b也不是fscanf的标准格式说明符,但由于我建议在本例中完全脱离fscanf,所以我不会深入研究这一点。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21078080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档