user-0 提问: 通讯录系统出错

回复:
user: user-1
content: #define N 50 #define exit #include<stdio.h> #include<string.h> struct people {char name[20];  char num[15];  char mail[20]; }peop[N]; //输出某个联系人信息 void printf_one(int i) {  	printf("\t%s\t%s\t%s\t%s\n",peop[i].name,peop[i].num,peop[i].mail);  }  void printf_f()//输出信息函数 { 	printf("\n\t姓名\t电话号码\t邮箱\n"); }  //输入某联系人信息 void input(int i) {   void printf_f();//掉了分号 printf_f(); printf("\n"); scanf("%s\t%s\t%s",peop[i].name,peop[i].num,peop[i].mail);//多了一个%s } //输出已存联系人  void printf_n(int n) { int j;void printf_one(int i); for(j=0;j<n;j++) { if((j!=0)&&(j%10==0))  { 	printf("\n\nPress any key to continue...:");  	getchar(); 	printf("\n\n");//这行可以修改下 } printf_one(j); }    getchar(); } //统计已有联系人数目  int load()//加载？//统计已有联系人数目 { FILE *fp; int i; if((fp=fopen("file","rb"))==NULL) { 	printf("\nCan not open file\n"); 	exit (0); } for(i=0;!feof(fp);i++)//直到指针移到尾部 fread(&peop[i],sizeof(struct people),1,fp); fclose(fp); return(i-1);//已有联系人数目 } //修改数据  int modify_data(int i,int n)//修改联系人 { int c,w1;  void input(int i);  void menu(); do { printf("\n修改选项=>\n\n  1).姓名  2).电话号码  3).邮箱  4).所有数据  5).取消并返回\n");  printf("请选择: "); scanf("%d",&c); if(c>5||c<1)  {printf("\nChoose error! Please again!"); getchar();} }while(c>5||c<1); do { switch(c) { case 1: printf("name:"); scanf("%s",peop[i].name); break; case 2: printf("number:"); scanf("%s",peop[i].num); break; case 3: printf("e-mail:"); scanf("%s",peop[i].mail); break; case 4: input(i); break; case 5: menu();  } printf("\n现在\n"); printf_f();  printf_one(i); printf("\n确定?\n\n\t1).是  2).不，重新修改  3).返回不保存 \n"); scanf("%d",&w1); } while(w1==2); return(w1); } //保存到文件  void save(int n) { FILE *fp;  int i; if((fp=fopen("file","wb"))==NULL) { printf("\nCan not open file\n"); exit(0); } for(i=0;i<n;i++) if(peop[i].name[0]!='\0') if(fwrite(&peop[i],sizeof(struct people),1,fp)!=1) printf("file write error\n"); fclose(fp); }//掉 了大括号  //浏览所有添加    void printf_back() { 	int w;  	void browse();  	void menu(); 	printf("\n\n\t^_^.Successful. ^_^\n\n"); 	printf("What do you want to do?\n\n\t1).浏览所有\t2).返回\b\b"); 	scanf("%d",&w); 	if(w==1) browse(); 	else menu(); }  #define N 50 #define exit #include<stdio.h> #include<string.h> #include"data.h"   void menu();//函数声明要放到main函数前面 void main() { 	menu(); }  void menu() { 	int n, w1; 	void enter();  void add();  void modify();   void browse();  void deleter();  void search(); 	do 	{ 		printf("\t************************菜单************************ "); 		printf("\t*******************1.新建联系人*******************"); 		printf("\t*******************2.添加联系人*******************"); 		printf("\t*******************3.修      改*******************"); 		printf("\t*******************4.删      除*******************"); 		printf("\t*******************5.浏      览*******************"); 		printf("\t*******************6.查      找*******************"); 		printf("\t*******************7.退      出*******************"); 		printf("\n\n********************通讯录********************* "); 		printf("请选择服务种类(1-7) : [ ]\b\b"); 		scanf("%d",&n); 		if(n<1||n>7) 		{w1=1;getchar();} 		else w1=0; 	}while(w1==1); 	switch(n) 	{ 	case 1: enter(); break; 	case 2: add(); break; 	case 3: modify(); break; 	case 4: deleter(); break; 	case 5: browse(); break; 	case 6: search(); break; 	case 7: exit(0); 	} }  void enter()//新建联系人 { int i,n; printf("How many people(0-%d)?:",N-1); scanf("%d",&n); printf("请输入数据:\n"); for(i=0;i<n;i++) {printf("\n输入第 %d个记录.\n",i+1);  input(i); } if(i!=0) save(n); printf_back(); }  void add()//添加联系人 { int i,n,k,t;    n=load(); printf("How many people do you want to add(0-%d)?:",N-n-1); scanf("%d",&t);     k=n+t; for(i=n;i<k;i++) { printf("\n输入第 %d个记录.\n",i-n+1);  input(i);} save(k);  printf_back(); }  void modify()//修改联系人 { struct people s;   int i,n,k,w0=1,w1,w2=0;  n=load(); do { k=-1;  printf_f();   printf_n(n); do { printf("\n\n输入希望修改的联系人的姓名\n姓名:"); scanf("%s",s.name); for(i=0;i<n;i++) if(strcmp(s.name,peop[i].name)==0) {k=i; s=peop[i];} if(k==-1) printf("\n\n没有记录请重新输入!"); }while(k==-1); printf_f();   printf_one(k); w1=modify_data(k,n); if(w1==1) {printf("\n\t^_^.Successful ^_^.\n\n是否继续?\n\n\t1).是 2).保存返回\t[ ]\b\b"); scanf("%d",&w0);  w2=1;} else {w0=0;  if(w2==0) peop[k]=s;} if((w0!=1)&&(w2==1))  save(n); }while(w0==1);    menu(); }  void browse()//浏览函数功能之一 { int n;  n=load(); printf_f();  printf_n(n); printf("\t共有 %d 记录.\n",n); printf("\nPress any key to back..."); getchar(); menu(); }  void search()//查找函数 功能之一 { int w0,k,i,n,w1,w2; struct people s;  n=load(); do {printf("请选择查找类别:  1).姓名  2).电话号码   [ ]\b\b"); scanf("%d",&w1); if(w1<1||w1>2) {printf("输入错误!请重新输入!\n"); w2=1;} }while(w2==1); if(w1==1) {do { k=-1;  do { printf("\n\nEnter name that tou want to search!\nName:"); scanf("%s",s.name); for(i=0;i<n;i++) if(strcmp(s.name,peop[i].name)==0) {k=i; s=peop[i];} if(k==-1) printf("\n\n没有记录请重新输入!"); }while(k==-1); printf_f();  printf_one(k); printf("\nWhat do you want to do?\n\t1).继续   2).返回菜单   [ ]\b\b"); scanf("%d",&w0); }while(w0==1); menu(); } else { do { k=-1;  do { printf("\n\nEnter number that tou want to search!\nNum:"); scanf("%s",s.num); for(i=0;i<n;i++) if(strcmp(s.num,peop[i].num)==0) {k=i; s=peop[i];} if(k==-1) printf("\n\n没有记录请重新输入!"); }while(k==-1); printf_f();  printf_one(k); printf("\nWhat do you want to do?\n\t1).继续   2).返回菜单   [ ]\b\b"); scanf("%d",&w0); }while(w0==1); menu(); } }  void deleter()//删除联系人 {struct people s;  int i,n,k,w0,w1;  n=load(); do { k=-1;  printf_f();  printf_n(n); do { printf("\n\nEnter name that you want to delete!\nName:"); scanf("%s",s.name); for(i=0;i<n;i++) if(strcmp(s.name,peop[i].name)==0) {k=i; s=peop[i];} if(k==-1) printf("\n\n没有记录请重新输入!"); }while(k==-1); printf_f();  printf_one(k); printf("\n确定?\n\t1).是   2).返回  [ ]\b\b"); scanf("%d",&w0);   if(w0==1) {peop[k].name[0]='\0'; save(n);}  else break; printf("\n\t^_^.Successful^_^.\n"); printf("What do you want to do?\n\t1).继续   2).返回  [ ]\b\b"); scanf("%d",&w1); }while(w1==1); menu(); }

user: user-2
content: //输入某联系人信息 void input(int i) {   void printf_f();   //这漏了; printf_f();  printf("\n");   scanf("%s\t%s\t%s\t%s",peop[i].name,peop[i].num,peop[i].mail);  }                                            //输出已存联系人  void printf_n(int n) { int j;void printf_one(int i);  //这也漏了;   for(j=0;j<n;j++)   { if((j!=0)&&(j%10==0))    {   printf("\n\nPress any key to continue...:");    getchar();   printf("\n\n");//这行可以修改下   }     printf_one(j);   }      getchar(); }                                       //保存到文件  void save(int n) { FILE *fp;    int i;   if((fp=fopen("file","wb"))==NULL)   { printf("\nCan not open file\n");     exit(0);   }   for(i=0;i<n;i++)   if(peop[i].name[0]!='\0')   if(fwrite(&peop[i],sizeof(struct people),1,fp)!=1)   printf("file write error\n");   fclose(fp); }  //这漏了}

user: user-3
content: 代码排好格式，从上往下检查花括号的配对关系，是不是有遗漏的，每一行结束有没有遗漏的分号