c语言关于文件保存后乱码的问题

提问:为什么保存到txt文件后乱码了,该如何解决呢?
代码如下:

void filesave()
{
    FILE* fp;//声明fp是指向FILE类型的指针
    fp = fopen("admin.txt", "w");
    if (fp == NULL)
    {
        printf("文件打开失败\n");
        exit(0);// 终止调用进程
    }
    fwrite(admins, sizeof(struct admin), M, fp);
    fclose(fp);

    FILE* fq;
    fq = fopen("dishes.txt", "w");
    if (fq == NULL)
    {
        printf("文件打开失败\n");
        exit(0);
    }
    fwrite(dishes, sizeof(struct dish), H, fq);
    fclose(fq);

    FILE* fz;
    fz = fopen("tables.txt", "w");
    if (fz == NULL)
    {
        printf("文件打开失败\n");
        exit(0);
    }
    fwrite(tables, sizeof(struct table), N, fz);
    fclose(fz);

    FILE* ft;
    ft = fopen("table_dishes.txt", "w");
    if (ft == NULL)
    {
        printf("文件打开失败\n");
        exit(0);
    }
    fwrite(table_dishes, sizeof(struct dish), N * H, ft);
    fclose(ft);
    printf("\t\t\t");
    printf("信息保存成功!\n");
}

引用chatgpt回答:
文件保存后出现乱码的问题可能是因为文件的编码格式与打开文件时指定的编码格式不匹配。在C语言中,可以使用fopen函数来打开文件,同时指定文件的读写方式和编码格式。如果没有指定编码格式,则默认使用本地系统的默认编码格式,可能会导致文件保存后出现乱码。

解决这个问题的方法是,可以在使用fopen函数打开文件时,指定编码格式。例如,如果想要将文件保存为UTF-8编码格式,可以使用如下代码:

FILE *fp = fopen("filename.txt", "w, ccs=UTF-8");


在这个例子中,我们使用了ccs=UTF-8来指定文件的编码格式为UTF-8。如果你想使用其他编码格式,可以将UTF-8替换为对应的编码格式即可。

需要注意的是,如果在保存文件时使用了错误的编码格式,那么打开文件时指定的编码格式也必须与之匹配,否则依然会出现乱码问题。因此,在使用fopen函数时,建议明确指定文件的编码格式,避免出现不必要的问题。

用fwrite写入的文件,用文本方式打开看都是乱码,存储的是二进制。如果想用文本方式打开能看,那要用fprintf形成字符串写入

fwrite写入的都是二进制文件,用txt记事本打开肯定是乱码的,
如果要看二进制数,有以下几个工具可以查看。winhex和besnew都可以查看。
希望结果对你有帮助。

你写入的是二进制文件,所以乱码正常
如果希望不乱码,可以用
fprintf
fscanf
来读写,类似printf和scanf的用法,只是多一个fp指针
那么,不能整体写入结构体,而是需要一个字段一个字段写,一个字段一个字段读。