c语言输出txt文件乱码

系统存入文件和输出文件没有问题,但是打开txt文件时出现乱码,已试过将文件调换编码方式打开不行,求解答

#include<stdio.h>
#include<math.h>
#include<process.h>

#define N 20 //学校最大数目
#define M 20 //男子项目最大数
#define W 20 //女子项目最大数

//存放项目信息的结构体
typedef struct
{
    int inum;//项目编号
    int top;//取名次的数目
    int range[5];//名次
    int mark[5];//分数
}itemnode;

//存放学校信息的结构体
typedef struct
{
    int snum;//学校编号
    int score;//学校总分
    int mscore;//男子总分
    int wscore;//女子总分
    itemnode t[M + W];//项目数组
}snode;
snode a[N];//定义一个学校数组

//菜单函数
void menu(int n,int m,int w)
{//n代表学校数,m代表男子数,w代表女子数
    int c;
    void input(int n,int m,int w);//输入功能
    void output(int n,int m,int w);//输入功能
    void sortput(int n,int m,int w);//排序输出
    void search(int n,int m,int w);//查询功能
    printf("\t\t\t欢迎使用\t\t\t\t\t\n");
    printf("运动会分数统计系统\n\n");
    printf("1.信息输入\n");
    printf("2.统计输出\n");
    printf("3.排序输出\n");
    printf("4.信息查询\n");
    printf("5.退出系统\n\n");
    printf("=======================================================\n\n");
    printf("请输入您想要实现的功能(0--4):");
    scanf("%d",&c);
    switch(c){
    case 1:
        input(n,m,w);
        break;
    case 2:
        output(n,m,w);
        break;
    case 3:
        sortput(n,m,w);
        break;
    case 4:
        search(n,m,w);
        break;
    case 5:
        printf("感谢使用\n");
        exit(0);//正常退出
    default:
        printf("您输入有误,请重新输入!");
        menu(n,m,w);
    }
}

//将信息写入文件中
void savetofile()
{
    FILE *fp;//定义一个文件指针
    int i;
    if(NULL == (fp = fopen("file.txt","w"))){
        printf("打开文件失败!\n");
        return;
    }
    for(i = 0;i < N;i ++){
        if('\0' != a[i].snum)
        if(fwrite(&a[i],sizeof(snode),1,fp) != 1){
            printf("存入信息失败!\n");
            return;
        }
    }
    fclose(fp);//关闭文件
}

//将信息从文件里取出
void readfromfile()
{
    int i;
    FILE *fp;
    if((fp=fopen("file.txt","rb"))==NULL){
        printf("文件打开失败!\n");
        return;
    }
    for(i = 0;i < N;i ++){
        fread(&a[i],sizeof(snode),1,fp);
    }
    fclose(fp);
}

/

希望输出格式为

img

这是肯定的,因为 fwrite 属于二进制写入,你要避免乱码
可以考虑用 fprintf 去写入,用法和 printf 类似
相应地,用 fscanf 读取

【以下回答由 GPT 生成】

在C语言中输出txt文件时出现乱码的原因和解决方法如下:

原因:

  1. 编码方式错误:在写入文件时,如果使用的编码与打开文件使用的编码方式不一致,会导致文件乱码。
  2. 字符集问题:如果写入文件的字符集与打开文件时使用的字符集不匹配,也会导致文件乱码。
  3. 未设置文件编码:有时候文件并没有指定编码方式,因此打开文件时会导致乱码。

解决方法:

  1. 使用正确的编码方式:确保写入文件使用的编码方式与打开文件时使用的编码方式相同。可以使用fopen函数指定编码方式,例如:fopen("file.txt", "w, ccs=UTF-8")
  2. 指定正确的字符集:如果使用非ASCII字符集写入文件,确保打开文件时使用相同的字符集。
  3. 设置文件编码:确保文件被写入时指定了正确的编码方式,可以在打开文件后使用setlocale(LC_ALL, "UTF-8")设置编码方式。
  4. 检查数据源编码:检查写入文件的数据源编码,确保它与目标编码方式一致。
  5. 避免连续打开和关闭文件:如果频繁打开和关闭文件,可能会导致编码混乱。尽量减少文件操作的次数。
  6. 使用文本编辑器打开文件:有时候文本编辑器将文件作为二进制文件打开,导致文件乱码。尽量使用文本编辑器打开文件。

根据您提供的代码片段,我没有看到您写入文件的代码,所以无法确定具体问题的发生在哪里。但是可以根据以上解决方法逐一排查,找出导致文件乱码的原因并进行相应的处理。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^