用c语言写一个通讯录,开贴可能会出现好些问题来求教

lax_Z 2015-04-19 10:48:26
废话不多说,先放出第一个问题
代码:
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"

int add_people();
/*void check_people();
void revise_people();
void delete_people();*/
void save_exit();



main()
{
int com; /* 定义com变量用作读取操作符*/
printf("======================Welcome to Message manage system=========================\n");
printf("\n");
printf("===============1.Add contact people 2.Check contact people=================\n");
printf("\n");
printf("===============3.Revise contact people 4.Delete contact people================\n");
printf("\n");
printf("============================ 5.Save&Exit======================================\n");
scanf("%d",&com);
while(1)
{
switch(com)
{
case 1:add_people();break;
/*case 2:check_people();break;
case 3:revise_people();break;
case 4:delete_people();break;*/
case 5:save_exit();break;
}
}


}

int add_people()
{
FILE *fp;
char people,phone,filename[10],temp;
temp=78;
while(1)
{
printf("输入要存储到的文件名\n");
scanf("%s",filename);
if((fp=fopen(filename,"w"))==NULL)
{
printf("无法打开\n");
exit(0);
}
loop: printf("请输入你要保存的联系人(以#结束)\n");
people=getchar();
while(people!='#')
{
fputc(people,fp);
putchar(people);
people=getchar();
}
printf("请输入要保存的联系人号码(以#结束)\n");
phone=getchar();
while(phone!='#')
{
fputc(phone,fp);
putchar(phone);
phone=getchar();
}
putchar(10);
printf("是否继续添加联系人Y/N\n");
scanf("%s",&temp);
if(temp=='n'||temp=='N')
{
printf("按下任意键返回主菜单\n");
getchar();
return 0;
}else
goto loop;
}
fclose(fp);
return 0;
}

void save_exit()
{
printf("按下任意键退出\n");
getchar();
exit(0);
}
问题是新建联系人后按n键我要返回到主函数进行继续选择,该怎么做?
...全文
172 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 楼主 lax_Z 的回复:
废话不多说,先放出第一个问题 代码: #include "stdio.h" #include "conio.h" #include "stdlib.h" int add_people(); /*void check_people(); void revise_people(); void delete_people();*/ void save_exit(); main() { int com; /* 定义com变量用作读取操作符*/ printf("======================Welcome to Message manage system=========================\n"); printf("\n"); printf("===============1.Add contact people 2.Check contact people=================\n"); printf("\n"); printf("===============3.Revise contact people 4.Delete contact people================\n"); printf("\n"); printf("============================ 5.Save&Exit======================================\n"); scanf("%d",&com); while(1) { switch(com) { case 1:add_people();break; /*case 2:check_people();break; case 3:revise_people();break; case 4:delete_people();break;*/ case 5:save_exit();break; } } } int add_people() { FILE *fp; char people,phone,filename[10],temp; temp=78; while(1) { printf("输入要存储到的文件名\n"); scanf("%s",filename); if((fp=fopen(filename,"w"))==NULL) { printf("无法打开\n"); exit(0); } loop: printf("请输入你要保存的联系人(以#结束)\n"); people=getchar(); while(people!='#') { fputc(people,fp); putchar(people); people=getchar(); } printf("请输入要保存的联系人号码(以#结束)\n"); phone=getchar(); while(phone!='#') { fputc(phone,fp); putchar(phone); phone=getchar(); } putchar(10); printf("是否继续添加联系人Y/N\n"); scanf("%s",&temp); if(temp=='n'||temp=='N') { printf("按下任意键返回主菜单\n"); getchar(); return 0; }else goto loop; } fclose(fp); return 0; } void save_exit() { printf("按下任意键退出\n"); getchar(); exit(0); } 问题是新建联系人后按n键我要返回到主函数进行继续选择,该怎么做?
数据结构的链表操作就可以了
苏叔叔 2015-04-19
  • 打赏
  • 举报
回复
把scanf放到while中即可,如下:

	while (1)
	{
		scanf("%d", &com);
		switch (com)
		{
		case 1:add_people(); break;
			/*case 2:check_people();break;
			case 3:revise_people();break;
			case 4:delete_people();break;*/
		case 5:save_exit(); break;
		}
	}
lax_Z 2015-04-19
  • 打赏
  • 举报
回复
引用 1 楼 zhangxiangDavaid 的回复:
两种方法 1.使用while,整个main函数就是一个大while 2.使用goto语句
能在我的代码上加入第一种方法来实现吗?就修改我的代码然后发出来嘛
苏叔叔 2015-04-19
  • 打赏
  • 举报
回复
两种方法 1.使用while,整个main函数就是一个大while 2.使用goto语句
苏叔叔 2015-04-19
  • 打赏
  • 举报
回复
if(strcmp(per[i].people,s)!=0)
i++;	 //当要查找的联系人和文件中的联系人一样时且n值(每添加一个联系人i值增1)小于i值时执行后面的语句
你只查找i=0的情况?
lax_Z 2015-04-19
  • 打赏
  • 举报
回复
引用 3 楼 zhangxiangDavaid 的回复:
把scanf放到while中即可,如下:

	while (1)
	{
		scanf("%d", &com);
		switch (com)
		{
		case 1:add_people(); break;
			/*case 2:check_people();break;
			case 3:revise_people();break;
			case 4:delete_people();break;*/
		case 5:save_exit(); break;
		}
	}
你回答的和我问的不是一个额....不过之前的那个问题倒是解决了,下面又有问题了
lax_Z 2015-04-19
  • 打赏
  • 举报
回复
问题又来了,之前的自己已解决 #include "stdio.h" #include "conio.h" #include "stdlib.h" #include "string.h" typedef struct { char people[20]; char phone[11]; }person; //用typedef声明一个新类型名Person person pe[50]; //用新类型名person定义pe int add_people(person per[],int n); int menu(); int check_people(person per[],int n); /*void revise_people(); void delete_people();*/ void save_exit(); void main() { int n=0; // while(1) { switch(menu()) { case 1:printf("新建联系人到通讯录\n");n=add_people(pe,n);break; case 2:printf("在通讯录中查找联系人\n");check_people(pe,n);system("pause");break; //调用的暂停函数,等待用户输入任意值后执行 /*case 3:revise_people();break; case 4:delete_people();break;*/ case 5:save_exit();break; } } } int menu() //菜单函数编写 { char com; //定义com变量用作读取操作符 do { system("cls"); printf("======================欢迎进入lax通讯录管理系统==============================\n"); printf("\n"); printf("===============1.添加联系人 2.查找联系人=========================\n"); printf("\n"); printf("===============3.修改联系人 4.删除联系人=========================\n"); printf("\n"); printf("============================ 5.退出软件=====================================\n"); printf("\n"); printf("============================ 请选择要执行操作前的序号========================\n"); scanf("%s",&com); }while(com<'1'||com>'5'); return(com-'0'); } int add_people(person per[],int n) { int i=0; FILE *fp; char filename[10],temp; printf("输入要存储到的文件名\n"); scanf("%s",filename); if((fp=fopen(filename,"a"))==NULL) { printf("无法打开\n"); exit(0); } while(temp!='N'&&temp!='n') { printf("请输入你要保存的联系人\n"); scanf("%s",per[n+1].people); fprintf(fp,"%s ",per[n+1].people); //向文件中保存联系人姓名 printf("请输入要保存的联系人号码\n"); scanf("%s",per[n+1].phone); fprintf(fp,"%s\n",per[n+1].phone); //向文件中保存联系人电话 printf("是否继续添加联系人Y/N\n"); scanf("%s",&temp); i++; } printf("按下任意键返回主菜单\n"); fclose(fp); getchar(); return (n+i); } int check_people(person per[],int n) { int t; printf("请选择按姓名还是按电话查找\n"); printf("=========1.姓名========== \n"); printf("\n"); printf("=========2.电话========== \n"); scanf("%d",&t); while(t!=1&&t!=2) { printf("输入错误,请重新选择:"); scanf("%d",&t); } if(t==1) { char s[10]; //定义要比较的联系人数组 int i=0; printf("请输入要查询的联系人姓名\n"); scanf("%s",s); if(strcmp(per[i].people,s)!=0) i++; //当要查找的联系人和文件中的联系人一样时且n值(每添加一个联系人i值增1)小于i值时执行后面的语句 if(i==n) { printf("你查找的联系人不在该通讯录,请检查你的输入是否有误\n"); return; //返回到主函数,然后执行system(pause)函数 } printf("姓名:%s",per[i].people); printf("电话:%s",per[i].phone); } if(t==2) { char p[15]; int i=0; printf("请输入要查询的联系人电话\n"); scanf("%s",p); while(strcmp(p,per[i].phone)!=0&&i<n) i++; if(i==n) { printf("你查找的联系人不在该通讯录,请检查你的输入是否有误\n"); return; } printf("姓名:%s",per[i].people); printf("电话:%s",per[i].phone); } } void save_exit() { printf("按下任意键退出\n"); getchar(); exit(0); } 查找联系人时当输入正确的关键词不能正确输出该联系人

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧