user-0 提问: 用c语言写一个通讯录，开贴可能会出现好些问题来求教

回复:
user: user-1
content: 引用 楼主 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键我要返回到主函数进行继续选择，该怎么做？  数据结构的链表操作就可以了

user: user-2
content: 把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; 		} 	}

user: user-0
content: 引用 1 楼 zhangxiangDavaid 的回复:两种方法 1.使用while，整个main函数就是一个大while 2.使用goto语句能在我的代码上加入第一种方法来实现吗？就修改我的代码然后发出来嘛

user: user-2
content: 两种方法 1.使用while，整个main函数就是一个大while 2.使用goto语句

user: user-2
content: if(strcmp(per[i].people,s)!=0) i++;	 //当要查找的联系人和文件中的联系人一样时且n值（每添加一个联系人i值增1）小于i值时执行后面的语句 你只查找i=0的情况？

user: user-0
content: 引用 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; 		} 	} 你回答的和我问的不是一个额....不过之前的那个问题倒是解决了，下面又有问题了

user: user-0
content: 问题又来了，之前的自己已解决 #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); } 查找联系人时当输入正确的关键词不能正确输出该联系人