为什么out文件里面性别显示Ů啊
in文件里面是
2107403005 郑洋 男 90
2107403003 赵文清 女 88
2107403002 陈可可 女 95
2107403001 赵文清 男 90
-1
#include <stdio.h>
#include <string.h>
#include <malloc.h>
enum SEX {
GIRL, BOY
};
struct SStudent {
int num; //学号
char name[20]; //姓名
SEX sex; //性别
float score; //成绩
struct SStudent* next; //下一个节点地址
};
struct SStudent *insert(struct SStudent *head,struct SStudent *p)
{
struct SStudent *p1,*p2;
if(head==NULL||p->num<head->num)
{
p->next=head;
return p;
}
p1=p2=head;
while(p->num>p2->num&&p2->next!=NULL)
{
p1=p2;
p2=p2->next;
}
if(p->num<=p2->num)
{
p->next=p2;
p1->next=p;
}
else
{
p2->next=p;
p->next=NULL;
}
return head;
}
void write(struct SStudent *head)
{
struct SStudent *p;
FILE *fp;
fp=fopen("out.txt","wt");
p=head;
while(p!=NULL)
{
fprintf(fp,"%d,%s,%s,%.2f\n",p->num,p->name,p->sex==BOY ?"男":"女",p->score);
p=p->next;
}
fclose(fp);
}
int main()
{
FILE *fp;
char s[20];
int t;
struct SStudent *p,*head=NULL;
fp=fopen("in.txt","rt");
do
{
fscanf(fp,"%d",&t);
if(t!=-1)
{
p=(struct SStudent *)malloc(sizeof(struct SStudent));
p->num=t;
fscanf(fp,"%s%s%f",p->name,s,&p->score);
p->sex=(strcmp(s,"男")==0?BOY:GIRL);
head=insert(head,p);
}
}
while(t!=-1);
fclose(fp);
write(head);
}
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
根据您提供的代码和文件,问题可能出现在 write
函数中的 fprintf
语句。在该语句中,使用了 %s
格式符来输出 SStudent
结构体中的 sex
字段。由于 sex
字段是一个枚举类型,而不是字符串类型,因此在输出时可能会出现乱码。
解决这个问题的方法是,在 fprintf
语句中将 sex
字段先转换为字符串类型,然后再输出。例如,可以使用一个数组来保存性别字符串,然后根据 sex
字段的值来选择相应的字符串进行输出。修改后的 write
函数如下所示:
void write(struct SStudent *head)
{
struct SStudent *p;
FILE *fp;
fp=fopen("out.txt","wt");
p=head;
while(p!=NULL)
{
const char *sex_str = (p->sex == BOY ? "男" : "女");
fprintf(fp,"%d,%s,%s,%.2f\n",p->num,p->name,sex_str,p->score);
p=p->next;
}
fclose(fp);
}
在这个版本的 write
函数中,我们首先定义了一个名为 sex_str
的字符串指针,用于保存性别字符串。然后根据 p->sex
字段的值来选择相应的字符串,并将其赋值给 sex_str
。最后,在 fprintf
语句中使用 %s
格式符来输出 sex_str
字符串即可。
希望以上信息能够帮助您解决问题!
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
能截个图吗,因为这个在我这里运行正常:
通过查看问题描述,可以发现是out文件中的性别显示出现了乱码,而in文件中的性别显示是正确的。可能是因为out文件的编码方式与in文件不一致导致的。因此,我们需要检查out文件的编码方式,以及将其转换为与in文件相同的编码方式。下面是解决该问题的步骤:
确认out文件的编码方式:可以使用notepad++等文本编辑器打开out文件,选择“编码”菜单下的“检测文本编码”功能,查看当前文件使用的编码方式。
将out文件转换为与in文件相同的编码方式:可以使用notepad++等文本编辑器打开out文件,选择“编码”菜单下的“转换为UTf-8”(如果in文件是UTF-8) 或“转换为ANSI”(如果in文件是ANSI),将其转换为与in文件相同的编码方式。
保存转换后的out文件,并重新运行程序或查看文件,检查性别显示是否已经正确显示。
如果以上步骤都未能解决问题,可能是因为out文件本身存在错误导致的乱码问题,需要进一步检查程序代码或输入数据的正确性。
以上是一种可能的解决方案,具体解决方法还需要根据问题具体情况进行调整。