| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2037 人关注过本帖
标题:编译写入文件出现乱码,求解?
只看楼主 加入收藏
hhj438921
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2018-1-16
结帖率:0
收藏
已结贴  问题点数:10 回复次数:5 
编译写入文件出现乱码,求解?
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册

写入信息时图1,写入之后查看就出现图2结果
程序源代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#define HEAD1 p->data.clss,p->data.name,p->data.xh,&p->data.cyy,&p->data.yy,&p->data.wl,&p->data.zy,&p->data.ty
#define TITLE1 "|      班级     |  姓名  |  学号  | C语言 | 计算机英语 | 网络基础 |  职业生涯  |  体育  |\n"
#define TITLE2 "|%15s|%8s|%8s|%5d|%5d|%5d|%5d|%5d|\n"
#define TITLE3 "-----------------------------------------------------------------------------------------\n"
#define MAX 10
struct book{
char clss[MAX];            /*班级*/
char name[MAX];            /*姓名*/
char xh[MAX];              /*学号*/
int cyy;                   /*C语言*/
int yy;                    /*计算机英语*/
int wl;                    /*网络基础*/
int zy;                    /*职业生涯*/
int ty;                    /*体育*/
};


typedef struct node
{
struct book data;
struct node *next;
}Node,*Link;






/*数据输出*/
void Output(Link head)
{


Node *p;


p=head->next;
if(p==NULL)
{
  printf("\n文件为空\n");
  getchar();


return ;
}
printf(TITLE3);
printf(TITLE1);
while(p!=NULL)
{


printf(TITLE3);
printf(TITLE2,HEAD1);
p=p->next;
}
printf(TITLE3);




}






/*数据输入*/
void Input(Link head)     /*链表头做参数传入*/
{
int flag=1;         /*判断是否继续输入的变量*/
Node *p;
Node *ptr;
FILE *fp;
    Output(head);
fp=fopen("H:\\C语言.txt","a");
if(fp==NULL)
{
printf("file open error!");
        exit(0);
}
p=head;
ptr=p;



while(p->next!=NULL)
{
   p=p->next;         /*将指针移至于链表最末尾*/
   ptr=p;
    }
while(flag)
{
p=(Node*)malloc(sizeof(Node ));

printf("输入学生信息:班级,姓名,学号,C语言,计算机英语,网络基础,职业生涯,体育:\n");
scanf("%s %s %s %d %d %d %d %d",HEAD1);
printf("\n是否继续输入(1.YES,0.NO)");
scanf("%d",&flag);


fprintf(fp,"%s ",p->data.clss);      /*写入文件*/
fprintf(fp,"%s ",p->data.name);
fprintf(fp,"%s ",p->data.xh);
fprintf(fp,"%d ",p->data.cyy);
fprintf(fp,"%d ",p->data.yy);
fprintf(fp,"%d ",p->data.wl);
fprintf(fp,"%d ",p->data.zy);
fprintf(fp,"%d ",p->data.ty);




ptr->next=p;         /*将p写入链表*/
p->next=NULL;
ptr=ptr->next;

}
fclose(fp);   /*关闭文件*/
}




/*学生信息查询函数*/
void Search(Link head)     /*链表头做参数传入*/
{
Node *p;
int choice;
int flag=0;              /*判断是否存在想要查询的信息*/
char xh[20];          /*存储学号的 变量*/
char name[20];       /*存储姓名的 变量*/


p=head->next;


printf("1:按学号查询  2:按姓名查询\n");
    printf("请选择(1 or 2):");
scanf("%d",&choice);
if(choice==1)              /*以学号搜索*/
{
printf("请输入学号:");
scanf("%s",xh);
while(p!=NULL)
{


if(strcmp(xh,p->data.xh)==0)       /*找到节点*/
{
printf(TITLE3);
printf(TITLE1);
printf(TITLE3);
printf(TITLE2,HEAD1);             /*输出节点内容*/
printf(TITLE3);

flag=1;
}
p=p->next;
}
if(flag==0)                  /*没有学生信息*/
printf("\n没有该学号信息\n");


}
else
if(choice==2)    /*以姓名查询*/
{
printf("请输入姓名:");
scanf("%s",name);
while(p!=NULL)
   {


    if(strcmp(name,p->data.name)==0)       /*找到节点*/
{
printf(TITLE3);
  printf(TITLE1);
    printf(TITLE3);
    printf(TITLE2,HEAD1);    /*输出节点内容*/
printf(TITLE3);


flag=1;
}
    p=p->next;

}
if(flag==0)                        /*没有信息*/
    printf("\n没有该姓名信息\n");
}
else
printf("\n搞事情是吧!\n");      /*选择不为1或2,输出错误提示*/




}




/*数据信息更改*/
void Update(Link head)     /*链表头做参数传入*/
{
Node *p,*ptr;
FILE *fp;
int n=1;        /*判断是否继续更改*/
int flag=0;    /*判断学号是否存在的参数*/
char xh[20];             /*储存修改的学号*/
fp=fopen("H:\\C语言.txt","w");   /*文件打开*/
if(fp==NULL)
{
printf("File open error!");
getchar();
exit(0);
}


while(n!=0)
{

       p=head->next;
if(p==NULL)
{
printf("\n文件为空\n");
getchar();


return ;
}


   printf("输入你想的学号:");
   scanf("%s",&xh);





while(p!=NULL)
{

if(strcmp(xh,p->data.xh)==0)      /*找到节点*/
{
printf(TITLE3);
printf(TITLE1);
printf(TITLE3);
printf(TITLE2,HEAD1);         /*原有信息输出*/
   printf(TITLE3);
       printf("输入新的学生信息:班级,姓名,学号,C语言,计算机英语,网络基础,职业生涯,体育:");  /*更新内容*/
       scanf("%s %s %s %d %d %d %d %d",HEAD1);
   flag=1;
printf("是否继续更改(1.yes  0.no):");
scanf("%d",&n);


break;
}
p=p->next;


}
if(flag==0)            /*没有信息,提示*/
{
printf("没有改学号信息\n");
printf("是否继续更改(1.yes  0.no):");
scanf("%d",&n);
}
}


ptr=head->next;
while(ptr!=NULL)      /*重新将链表内容写入文件*/
{
fprintf(fp,"%s ",ptr->data.clss);
fprintf(fp,"%s ",ptr->data.name);
fprintf(fp,"%s ",ptr->data.xh);
fprintf(fp,"%d ",ptr->data.cyy);
fprintf(fp,"%d ",ptr->data.yy);
fprintf(fp,"%d ",ptr->data.wl);
fprintf(fp,"%d ",ptr->data.zy);
fprintf(fp,"%d ",ptr->data.ty);
ptr=ptr->next;

}


fclose(fp);   /*关闭文件*/
}


/*数据删除*/
void Delete(Link head)
{
FILE *fp;
Node *p,*ptr;
    char xh[20];
int flag=0;

fp=fopen("H:\\C语言.txt","w");   /*文件打开*/
if(fp==NULL)
{
printf("File open error!");
getchar();
exit(0);
}
ptr=head;
p=head->next;

printf("输入你想删除学生信息的学号:");   /*学号记录*/
scanf("%s",xh);
while(p!=NULL)
{
if(strcmp(xh,p->data.xh)==0)  /*找到删除信息的节点*/
{
ptr->next=p->next;                 /*实现删除功能*/
p->next=NULL;
free(p);                          /*释放p的内存*/
flag=1;         /*标志找到了此节点*/
break;
}
else
{
   ptr=p;
   p=p->next;
}
}
if(flag=0)        /*没有此信息,输出提示信息*/
printf("\n没有你想删除的学生信息.\n");


ptr=head->next;
while(ptr!=NULL)    /*链表内容重新写入文件*/
{
fprintf(fp,"%s ",ptr->data.clss);
fprintf(fp,"%s ",ptr->data.name);
fprintf(fp,"%s ",ptr->data.xh);
fprintf(fp,"%d ",ptr->data.cyy);
fprintf(fp,"%d ",ptr->data.yy);
fprintf(fp,"%d ",ptr->data.wl);
fprintf(fp,"%d ",ptr->data.zy);
fprintf(fp,"%d ",ptr->data.ty);
ptr=ptr->next;
}
}






/*选择错误提醒函数*/
void wrong()
{
printf("\nYOU CHOSE WRONG NUMBER!!!\n");
}








/*菜单函数*/
void menu()
{
    printf("\n========班级信息成绩管理系统========\n");
    printf("\n==============欢迎使用==============\n");
    printf("------------------------------------\n");
    printf("|          1.录入学生信息          |\n");
    printf("------------------------------------\n");
    printf("|          2.查看学生信息          |\n");
    printf("------------------------------------\n");
    printf("|          3.查询学生信息          |\n");
    printf("------------------------------------\n");
    printf("|          4.修改学生信息          |\n");
    printf("------------------------------------\n");
    printf("|          5.删除学生信息          |\n");
    printf("------------------------------------\n");
    printf("|          6.版本信息              |\n");
    printf("------------------------------------\n");
    printf("|          0.退出                  |\n");
    printf("------------------------------------\n");


}



/*main 函数*/
int main(void)
{
Link head;
int choice=1;
Node *p;
Node *tail;
FILE *fp;

fp=fopen("H:\\C语言.txt","a+");


if(fp==NULL)    /*打开文件*/
{
printf("FILE open error!\n");
exit(0);
}




head=(Node*)malloc(sizeof(Node));     /*链表头建立*/
    if(!head)
    {
      printf("\n allocate memory failure ");  /*如没有申请到,打印提示信息*/
      return 0;                       /*返回主界面*/
     }

head->next=NULL;
tail=head;





while(fgetc(fp)!=EOF)
{
fseek(fp,-1,1);

p=(Node*)malloc(sizeof(Node));

if(!p)
{
printf("\n allocate memory failure!\n");
return 0;
}
fscanf(fp,"%s",p->data.clss);
fscanf(fp,"%s",p->data.name);
fscanf(fp,"%s",p->data.xh);
fscanf(fp,"%d",&p->data.cyy);
fscanf(fp,"%d",&p->data.yy);
fscanf(fp,"%d",&p->data.wl);
fscanf(fp,"%d",&p->data.zy);
fscanf(fp,"%d",&p->data.ty);

p->next=NULL;
tail->next=p;
tail=p;
}
fclose(fp); /*关闭文件*/



    while(1)
{
   menu();
   printf("请输入你的操作序号(0--5):");  /*选择操作*/
   scanf("%d",&choice);
if(choice==0)                /*如果选择0,退出*/
{


printf("=====>thank you for useness!");
getchar();
   break;
}
switch(choice)
{
case 1:Input(head);break;
case 2:Output(head);getch();break;
case 3:Search(head);getch();break;
case 4:Update(head);getch();break;
case 5:Delete(head);getch();break;
default:wrong();break;
}
}


getchar();

return 0;
}
搜索更多相关主题的帖子: data next NULL printf fprintf 
2018-01-17 10:40
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:4 
   printf("输入学生信息:班级,姓名,学号,C语言,计算机英语,网络基础,职业生涯,体育:\n");
    scanf("%s %s %s %d %d %d %d %d",HEAD1);
//没调试,但大概率你的问题在这句,而且这种形式不好,不但用户界面不友好用户体验差,而且你的程序随时面临着崩溃的危险。

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2018-01-17 11:25
hhj438921
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2018-1-16
收藏
得分:0 
回复 2楼 Knocker
排序解决了,出现新的乱码。
图片附件: 游客没有浏览图片的权限,请 登录注册

还有就是删除提示不行,明明判断了,就是没有不显示
2018-01-17 15:31
hhj438921
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2018-1-16
收藏
得分:0 
回复 2楼 Knocker
图片附件: 游客没有浏览图片的权限,请 登录注册

上面图片传错了
2018-01-17 15:32
shawlay
Rank: 2
等 级:论坛游民
帖 子:4
专家分:10
注 册:2018-1-18
收藏
得分:4 
菜单之类的文字从文件中读取的话代码会简洁很多
2018-01-18 20:27
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
收藏
得分:4 
调成统一码试试。
2018-01-18 23:26
快速回复:编译写入文件出现乱码,求解?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017218 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved