编译通过了,但是 运行时 当你输入数据有红色注释的地方有问题
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/**********结构体定义**************/
struct Message
{
char name[20];
char homephone[20];
char mobilephone[20];
char address[50];
char group[20];
char email[50];
}person,intialPerson;
void add();
void del();
void search();
void out();
void modify();
void begin();
/***************函数定义*******************/
void add()/************添加单个记录函数*****************/
{
FILE *fp;
int c=0;
printf("请输入需要保存的姓名:\n");
scanf("%s",person.name); //输入姓名
printf("请输入需要保存的住宅电话:\n");
scanf("%s",person.homephone); //输入固定电话号码
printf("请输入需要保存的手机号码:\n");
scanf("%s",person.mobilephone); //输入手机号码
printf("请输入需要保存的家庭地址活工作单位:\n");
scanf("%s",person.address); //输入家庭住址
printf("请给保存号码分组\\朋友\\家人\\同事\\同学:");
scanf("%s",person.group); //输入分组信息
printf("请输入需要保存的E-MAIL:\n");
scanf("%s",person.email); //输入E-MAIL
printf("确定请输入1,取消请按2:"); //按键进行选择
scanf("%d",&c);
switch(c)
{
case 1: break; //输入1,继续执行
case 2: return; //输入2,退出函数
default:
printf("输入错误!!!");
}
fp=fopen("通讯录.txt","a"); //以A的方式打开文件“通讯录.txt”
fwrite(&person,sizeof(Message),1,fp); //把输入的内容输出到磁盘文件“通讯录.txt”上
printf("添加成功!!!\n");
fclose(fp); //关闭文件
begin(); //跳回主菜单
}
void del() //定义删除函数
{
FILE *fp;
char a[20];
int c=0;
fp=fopen("通讯录.txt","a"); //以A的方式打开文件“通讯录.txt”
printf("请输入姓名:");
scanf("%s",a); //输入要删除记录的姓名
do
{
fread(&person,sizeof(Message),1,fp); //把文件中的第一条记录读入内存
if(strcmp(person.name,a)==0) //比较看是否与要删除的一样
{
printf("确定请输入1,取消请按2:");
scanf("%d",c);
switch(c) //按键进行选择
{
case 1:
{
fseek(fp,0-sizeof(Message),SEEK_CUR); //把文件指针指向上一个记录
person=intialPerson; //用一个空的记录取代它
fwrite(&person,sizeof(Message),1,fp);
}break;
case 2: return; //退出 del()函数
default:
printf("输入错误!!!");
}
}
fseek(fp,sizeof(Message),SEEK_CUR); //指针指向下一条记录
}while(strcmp(person.name,a)!=0);
if(feof(fp)) //当到文件末尾还没有找到时
{
printf("没有此人记录");
printf("press any key to continue....");
getchar();
}
fclose(fp); //关闭文件
}
void modify() /******对编辑函数定义********/
{
FILE *fp;
char a[20];
int i=0,c=0;
fp=fopen("tongxuelu.txt","a"); //以A的方式打开文件“通讯录.txt”
printf("请输入要待修改人的姓名: ");
scanf("%s",a); //输入要修改的记录的姓名
fread(&person,sizeof(Message),1,fp); //把文件内容读入内存
do{
if(strcmp(person.name,a)==0) //比较看是否是要修改的,如果是的话执行循环内语句
{
printf("姓名: %s\n手机号码: %s\n固定电话: %s\n家庭住址: %s\n组名: %s\nE-MAIL: %s\n",person.name,person.mobilephone,person.homephone,person.group,person.email);
printf("*****************");
break;
}
else
{
fseek(fp,sizeof(Message),SEEK_CUR); //指针指向下一条记录
fread(&person,sizeof(Message),1,fp); //把此条文件记录内容读入内存
}
}while(!feof(fp)); //当没有到文件末尾还没有找到时
if(feof(fp)) //到文件结尾还没有找到时
{
printf("没有此人记录");
printf("press any key to continue....");
getchar();
}
else //找到记录
{
printf("请重新输入要修改人的信息: \n");
printf("请输入需要保存的姓名:\n");
scanf("%s",person.name);
printf("请输入需要保存的住宅电话:\n");
scanf("%s",person.homephone);
printf("请输入需要保存的手机号码:\n");
scanf("%s",person.mobilephone);
printf("请输入需要保存的家庭地址活工作单位:\n");
scanf("%s",person.address);
printf("朋友?家人?同事?同学?:\n");
printf("请给保存号码分组:\n ");
scanf("%s",person.group);
printf("请输入需要保存的E-MAIL:\n");
scanf("%s",person.email);
printf("确定请输入1,取消请按2:");
scanf("%d",c);
switch(c) //按键进行选择
{
case 1:break;
case 2: return;
default:
printf("输入错误!!!");
}
fseek(fp,sizeof(Message),SEEK_CUR); //把文件指针指向要修改的记录
fwrite(&person,sizeof(Message),1,fp); // 重新写入把记录写入磁盘
printf("修改成功!!!\n");
printf("继续进行其他操作请输入1,取消请按2: "); //按键进行选择
scanf("%d",c);
switch(c)
{
case 1: return;break;
case 2: exit(1);
default:
printf("输入错误!!!");
}
}
fclose(fp);
begin();
}
void print() /****对查看函数定义*****/
{
FILE *fp;
fp=fopen("通讯录.txt","a"); //以A的方式打开文件“通讯录.txt”
printf("全部记录为:\n");
if(!feof(fp)) //当没有到文件末尾时
{
fread(&person,sizeof(Message),1,fp); //读入信息
printf("姓名: %s\n手机号码: %s\n固定电话: %s\n家庭住址: %s\n组名: %s\nE-MAIL: %s\n",person.name,person.mobilephone,person.homephone,person.group,person.email); //输出记录
fseek(fp,sizeof(Message),SEEK_CUR); //跳到下一条记录
}
begin(); //跳出主菜单
fclose(fp); //关闭文件
}
void search() /*****对查找函数定义*********/
{
char a[20];
FILE *fp;
fp=fopen("通讯录.txt","a"); //打开文件
fread(&person,sizeof(Message),1,fp); //读入内存信息
printf("请输入要查询记录的姓名: \n");
scanf("%s",a); //输入要查询记录的姓名
do{
if(strcmp(person.name,a)==0) //比较看是否是要查找的,如果是的话执行循环内语句
{
printf("姓名: %s\n手机号码: %s\n固定电话: %s\n家庭住址: %s\n组名: %s\nE-MAIL:%s\n",person.name,person.mobilephone,person.homephone,person.group,person.email);
break; //这里有问题 当你运行的时候会一直不停的输出,是哪儿的问题?
}
else
{
fseek(fp,sizeof(Message),SEEK_CUR); //指针指向下一条记录
fread(&person,sizeof(Message),1,fp); //把此条文件记录内容读入内存
}
}while(!feof(fp));
if(feof(fp)) //到文件末尾还没有找到时
{
printf("没有此人记录");
printf("press any key to continue....");
getchar();
}
begin(); //跳回主菜单
fclose(fp);
}
void out() /**********定义退出函数**********/
{
printf("谢谢使用!!!");
exit(1); //退出程序
}
void begin() //开始的菜单函数
{
int a;
printf("1: 添加\n2: 查看\n3: 编辑 \n4: 删除\n5: 退出\n");
printf("请输入您想进行的操作号:");
scanf("%d",&a);
switch(a)
{
case 1: add();break;
case 2: search();break;
case 3: modify();break;
case 4: del();break;
case 5: out();break;
default:
printf("输入错误!!!\n");
}
}
void main() //主函数
{
begin();
printf("谢谢使用!!!\n");
exit(1);
}