系统存入文件和输出文件没有问题,但是打开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);
}
/
希望输出格式为
这是肯定的,因为 fwrite 属于二进制写入,你要避免乱码
可以考虑用 fprintf 去写入,用法和 printf 类似
相应地,用 fscanf 读取
【以下回答由 GPT 生成】
在C语言中输出txt文件时出现乱码的原因和解决方法如下:
原因:
解决方法:
fopen
函数指定编码方式,例如:fopen("file.txt", "w, ccs=UTF-8")
。setlocale(LC_ALL, "UTF-8")
设置编码方式。根据您提供的代码片段,我没有看到您写入文件的代码,所以无法确定具体问题的发生在哪里。但是可以根据以上解决方法逐一排查,找出导致文件乱码的原因并进行相应的处理。
【相关推荐】