南方小莫 2020-04-05 13:45 采纳率: 33.3%
浏览 1423
已采纳

c操作txt文件,写入数据时,在txt中变成了乱码

#include
#include
#include
struct friends_list
{
char name[10];
char age[11];
char telep[13];
char qq[12];
struct friends_list *next;
};

struct friends_list create_f_list(struct friends_list *p){
if(p!=NULL) { printf("通讯录已经存在\n
********\n\n"); }
else {
p=(struct friends_list )malloc(sizeof(struct friends_list));
if(p==NULL) { printf("创建通讯录失败\n
*******************\n");}
p->next=NULL;
printf(" 成功新建通讯录\n*****************\n");
}
return p;
}
void insert_friends_list(struct friends_list p){
struct friends_list *q;
char c;
if(p==NULL) {printf("通讯录不存,请先创建\n\n\n");}
else {
q=(struct friends_list
)malloc(sizeof(struct friends_list));

    printf("请输入姓名 \n");
    scanf("%s",q->name);
    printf("请输入年龄 \n");
    scanf("%s",&q->age);
    printf("请输入电话号码 \n");
    scanf("%s",q->telep);
    printf("请输入qq号码 \n");
    scanf("%s",q->qq);
    q->next=NULL;
    q->next=p->next;
    p->next=q;
    printf("*************************\n\n");

}

}
void display_frd_list(struct friends_list p,char name[10],int i){
struct friends_list *q;
int j;
q=p->next;
if(i==1){
j=1;
while(q!=NULL){
if(strcmp(name,q->name)==0){
printf("------姓名为%s的第%d个联系人----\n",q->name,j);
printf("name:%s\n",q->name);
printf("age:%s\n",q->age);
printf("telephone:%s\n",q->telep);
printf("qq:%s\n",q->qq);
j++;
printf("
*******\n\n");
}
q=q->next;
}
if(j==1) { printf("没有姓名为%s的联系人。\n",name);}
}else{
j=1;
while(q!=NULL){
printf("-----第%d个联系人-----\n",j);
printf("name:%s\n",q->name);
printf("age:%s\n",q->age);
printf("telephone:%s\n",q->telep);
printf("qq:%s\n",q->qq);
q=q->next;
j++;
printf("********************\n\n\n");
}
if(j==1) printf("通讯录中没有记录\n");
}

}

void query_frd_list(struct friends_list *p)
{
int choice;
char name[10];
if(p==NULL){

}
while(1){
    printf("查询选项:输1.按姓名查询联系人     输入2.查询所有联系人    0:退出\n");
    scanf("%d",&choice);
    if(choice==1){
        printf("请输入联系人的名字:");
        scanf("%s",name);
        display_frd_list(p,name,1); 
    }   
    else if(choice==2) display_frd_list(p,name,2);
    else if(choice==0) break;
    else printf("选项错误\n");
}

}
int del_frd_list(struct friends_list p){
char name[10];
struct friends_list *q,*r;
int j;
j=1;
if(p==NULL){
printf("请先创建通讯录\n
***********\n\n");
return 1;
}

printf("请输入要删除的联系人的姓名:");
scanf("%s",name);
r=p;
q=p->next;
while(q!=NULL){
if(strcmp(name,q->name)==0){
r->next=q->next;
free(q);
q=r->next;
//j++;
}
else{
r=q; q=q->next;
j++;
}
}
if(j==0) printf("通讯录中没有姓名为%s的联系人。\n",name);
else printf("通讯录共删除了姓名为%s的 第%d 条记录\n******************\n\n",name,j);
return 0;
}

void writes(struct friends_list *p){
FILE *fp;
printf("successfully");
fp=fopen("/home/h/code/aaa.txt","wb");
if(fp==NULL) {printf("fail to open");}
fprintf(fp,"%s",p->name);
fwrite(p,sizeof(struct friends_list),1,fp);
fclose(fp);

}
int main(void){
int choice;
struct friends_list *p;
do{
printf("输入--1:新建 2:插入 3:查询 4:删除 5:数据输入到文件 0:退出\n");
printf("请选择功能:");
scanf("%d",&choice);
switch(choice){
case 1: p=create_f_list(p);break;
case 2: insert_friends_list(p);break;
case 3: query_frd_list(p); break;
case 4: del_frd_list(p); break;
case 5: writes(p); break;

case 0: break;
default: printf("选项错误,重新选择!");
}

}while(choice!=0);
printf("谢谢使用!\n");
return 0;
}

  • 写回答

4条回答 默认 最新

  • 守得云开终见月明 2020-04-05 14:24
    关注

    你的头文件为什么不复制一下?还是漏了?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 已采纳回答 10月28日

悬赏问题

  • ¥500 高有偿提问!求优化设计微信小程序
  • ¥15 matlab在安装时报错 无法找到入口 无法定位程序输入点
  • ¥15 收益高的广告联盟有哪些
  • ¥15 Android Studio webview 的使用问题, 播放器横屏全屏
  • ¥15 删掉jdk后重新下载,Java web所需要的eclipse无法使用
  • ¥15 uniapp正式环境中通过webapi将本地数据推送到设备出现的跨域问题
  • ¥15 xui建立节点,显示错误
  • ¥15 关于#单片机#的问题:开始、复位、十进制的功能可以实现,但是切换八进制的功能无法实现(按下按键也没有效果),把初始状态调成八进制,也是八进制可以实现但是切换到十进制不行(相关搜索:汇编语言|计数器)
  • ¥15 VINS-Mono或Fusion中feature_manager中estimated_depth是特征的深度还是逆深度?
  • ¥15 谷歌浏览器如何备份抖音网页数据