关于从文件中读取数据并写入结构体数组
各位大大好,本人新手一枚,最近写简单的通讯录的c程序,其他功能完好,最后一个将txt文件中的数据写入结构体数组的函数无法正常使用。程序代码如下:
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
#include<conio.h>
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<num;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<num;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<num;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<num;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<num;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<num;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<num-1;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<num;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<num;i++)
fscanf(fp,"%20s%12s\n",per[i].name,per[i].phone);
fclose(fp);}}
程序能够运行且其他功能完好。经过检测,最后三行语句没有产生作用。希望各位大大能指点指点,帮忙解决,谢谢!