c语言作业,要求按首字母给通讯录姓名排序,但是每次运行到这一步就会爆掉,求大神看看是哪里出了问题

#include<stdio.h>#include<string.h>struct friend{ char name[40]; char telenumber[12]; }friend[100];int j=0;int main(){ printf("亲爱的用户您好,本程序有以下功能:\n添加新联系人(可储存100个联系人)请按1;\n查看所有联系人请按2;\n删除联系人请按3;\n搜索及修改联系人请按4;\n退出请按5。"); int i; scanf("%d",&i); switch(i){ case 1:yi(1);break; case 2:er(2);break; case 3:san(3);break; case 4:si(4);break; case 5:printf("本程序即将关闭,感谢您的使用,再见!!!"); } return 0; }void yi(int x){ int i=0; if(j==99) {printf("通讯录已满\n");main();}; do{printf("请输入姓名") ; scanf("%s",&friend[j].name); printf("请输入手机号码"); scanf("%s",&friend[j].telenumber); printf("如果输入完毕,按5返回上一菜单;\n如果还要继续输入,请按其余任意数字继续。"); j++; int a; scanf("%d",&a); if(a==5) {i=1;break;} }while (j<=99); if(i==1){printf("\n");main();}; if(i==0){printf("通讯录已满\n");main();}; }void er(int x){ int i=1,p=0; char h[40],k[12]; if(j==0) {printf("通讯录为空\n\n"); main();} else {for(p=0;p<n;p++){ for(i=1;i<n-p;i++) {if(strcmp(friend[i-1].name,friend[i].name)>0) { strcpy(h[40],friend[i-1].name); strcpy(friend[i-1].name,friend[i].name); strcpy(friend[i].name,h[40]); strcpy(k[12],friend[i-1].telenumber); strcpy(friend[i-1].telenumber,friend[i].telenumber); strcpy(friend[i].telenumber,k[12]);} } } i=0; do{printf("%s %s\n",friend[i].name,friend[i].telenumber); i++;}while(i<=j);} printf("以上为所有联系人信息,按5返回上一菜单,按其余任意数字继续\n"); int a; scanf("%d",&a); printf("\n\n"); if(a==5) main(); else er(2); }
代码里面的那个n是J,没复制对

一般来说不是大问题。本想改一下,看到yi里竟然套着个main();,就看不懂了,没再往下看……追问

yi里面那个,只是想函数运算结束后回到主菜单,主要是er里面的排序有问题,每次运行到那儿就爆了

麻烦帮忙看看

追答

一个工程里出现两个或两个以上的main,这连编译都过不了的,不知你怎么还能运行?

追问

只是回到主函数啊,又不是建了两个主函数

追答

好奇怪啊,你的主函数允许递归调用?在我的印象中,主函数只能调用别的函数,任何函数都不可能调用主函数,包括它自己……

追问

是哒

温馨提示:答案为网友推荐,仅供参考
相似回答