c语言结构体数组存入文件_关于从文件中读取数据并写入结构体数组

已结贴√

问题点数:25 回复次数:10

关于从文件中读取数据并写入结构体数组

各位大大好,本人新手一枚,最近写简单的通讯录的c程序,其他功能完好,最后一个将txt文件中的数据写入结构体数组的函数无法正常使用。

程序代码如下:

#include

#include

#include

#include

struct txl          /*定义结构体数组*/

{

char name[20];

char phone[12];

}per[100];

int num=0;

FILE *fp;

void menu();

void xj();

void cx();

void cxname();

void cxphone();

void sc();

void showall();

void xg();

void xgwj(int i);

void d();

void x();

void main(int argc,char* argv[])    /*主函数,只用来打开菜单函数*/

{

while(1)

{

menu();

}

}

void menu()   /*菜单函数*/

{system("cls");

int a;

printf("\t\t\t*************************\n");

printf("\t\t\t**  1:      新建       **\n");

printf("\t\t\t**  2:      查询       **\n");

printf("\t\t\t**  3:      修改       **\n");

printf("\t\t\t**  4:    显示所有     **\n");

printf("\t\t\t**  5:      删除       **\n");

printf("\t\t\t**  6:      读         **\n");

printf("\t\t\t**  7:      写         **\n");

printf("\t\t\t*************************\n");

printf("按对应键进入对应功能:");

scanf("%d",&a);

switch(a)                /*用switch语句调用子函数*/

{

case 1:xj();break;

case 2:cx();break;

case 3:xg();break;

case 4:showall();break;

case 5:sc();break;

case 6:d();break;

case 7:x();break;

}

}

void xj()       /*新建联系人函数*/

{

char c;

printf("输入姓名\n");

scanf("%s",&per[num].name);        /*写入结构体数组*/

printf("输入电话\n");

scanf("%s",per[num].phone);

num++;

printf("按任意键返回菜单!");

c=getche();                 /*每写入一个数据num加1*/

}

void showall()            /*全部显示函数*/

{

int i;char c;

printf("联系人:\n姓名\t电话\n");

for(i=0;i

{

printf("%s\t",per[i].name);

printf("%s\n",per[i].phone);

}printf("按任意键返回菜单!");

c=getche();

return;

}

void cx()      /*查询函数*/

{

int a;

printf("欢迎进入查询功能。\n1:按姓名查找\n2:按电话查找。\n按其他键返回主菜单");

scanf("%d",&a);

switch(a)

{

case 1:cxname();break;

case 2:cxphone();break;

default:menu();break;

}

}

void cxname()    /*按姓名查找*/

{

int mark=0;

int i;char c;

char name[20];

printf("请输入姓名");

scanf("%s",name);

for(i=0;i

{

if(strcmp(per[i].name,name)==0)   /*对比查找*/

{

printf("您查找的联系人为:\n");

printf("---------------------\n");

printf("姓名:%s\n",per[i].name);

printf("电话:%s\n",per[i].phone);

printf("---------------------\n");

for(i=i+1;i

{

if(strcmp(per[i].name,name)==0)   /*对比查找*/

{

printf("您查找的联系人为:\n");

printf("---------------------\n");

printf("姓名:%s\n",per[i].name);

printf("电话:%s\n",per[i].phone);

printf("---------------------\n");}}

printf("按任意键返回菜单!");

c=getche();

return;

}

}

}

void cxphone()           /*按电话号码查找*/

{

int i;

char c;

int a=0;

char m[11];

printf("请输入电话\n");

scanf("%s",m);

for(i=0;i

{

if(strcmp(per[i].phone,m)==0)     /*对比查找*/

{

printf("您查找的联系人为:\n");

printf("---------------------\n");

printf("姓名:%s\n",per[i].name);

printf("电话:%s\n",per[i].phone);

printf("---------------------\n");

printf("按任意键返回菜单!");

c=getche();

return;

}    }}

void xg()     /*修改函数*/

{

int a=0;

int i,j;

char name[20];

printf("请输入要修改联系人的姓名\n");

scanf("%s",&name);

for(i=0;i

{

if (strcmp(per[i].name,name)==0)    /*对比查找*/

{

printf("以下是目标联系人信息\n");

printf("---------------------\n");

printf(" 姓名:%s\n",per[i].name);

printf(" 电话:%s\n",per[i].phone);

printf("---------------------\n");

printf("是否修改?确认请按1,返回请按2.\n");

scanf("%d",&j);

switch(j)

{

case 1:xgwj(i);break;

case 2:menu();break;

}

}

}

}

void xgwj(int i)     /*子函数,目的是将新的变量写入数组*/

{

printf("请选择需要修改的项目\n1:姓名。\n2:电话\n");

int j;

char c;

scanf("%d",&j);

switch(j)

{

case 1:printf("请输入新的内容\n");scanf("%s",&per[i].name);break;

case 2:printf("请输入新的内容\n");scanf("%s",&per[i].phone);break;

}

printf("修改成功!");

printf("按任意键返回菜单!");

c=getche();

}

void sc()    /*删除函数*/

{

int a=0;

int i,k,j;

char name[20];

printf("请输入你要删除联系人的姓名");

scanf("%s",&name);

for(i=0;i

{

if (strcmp(per[i].name,name)==0)   /*对比查找*/

{

printf("以下是目标联系人信息 \n");

printf("---------------------\n");

printf(" 姓名:%s\n",per[i].name);

printf(" 电话:%s\n",per[i].phone);

printf("---------------------\n");

printf("是否删除?\n1:是\n2: 否\n");

scanf("%d",&k);

if(k==1)

{for(j=i;j

per[j]=per[j+1];           /*数据前移覆盖*/

num--;

printf("删除成功\n");

}

}

}

printf("按任意键返回菜单!");

getche(); }

void x() //将结构体数组中的数据写入txl文件中

{int i;

if((fp=fopen("c:\\txl.txt","w++"))==NULL)

{printf("can not open");

exit(1);}

else

{for(i=0;i

fprintf(fp,"%20s%12s\n",per[i].name,per[i].phone);

}fclose(fp);}

void d()//将文件中的数据读入结构体数组中

{

int i;

if((fp=fopen("c:\\txl.txt","r"))==NULL)

{printf("can not open");

exit(1);

}

else

{for(i=0;i

fscanf(fp,"%20s%12s\n",per[i].name,per[i].phone);

fclose(fp);}}

程序能够运行且其他功能完好。经过检测,最后三行语句没有产生作用。希望各位大大能指点指点,帮忙解决,谢谢!

  • 6
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值