user-0 提问: 关于被调函数里面 的main（）函数问题

回复:
user: user-0
content: 不是说被调函数里不能调用main（）主函数吗？

user: user-1
content: # include<stdio.h>  int i = 0;  int main(void) { 	printf("天气不错!\n"); 	i++; 	if(i<5) 		main();  	return 0; }   main函数可以递归调用，但一般没什么必要

user: user-2
content: C语言的 main 除了作为程序入口之外 没什么特殊的 可以随意调用 没有不能调用的说法  而调用main 的确可能会造成递归 要理清思路 准备好出口

user: user-3
content: 引用 2 楼 weeplonly 的回复:不是的这处的main（）是什么意思啊？在被调函数里这么用？我没见过？运行没错 虽说main不是关键字什么的，但起码写个函数也不应该把名字起作main啊。这里没什么意思，能正确运行已经很意外了。

user: user-4
content: main函数里怎么写？

user: user-5
content: 学习了！！！！

user: user-0
content: 不是的这处的main（）是什么意思啊？在被调函数里这么用？我没见过？运行没错

user: user-3
content: main又不是让你调用的，找本基础书好好看吧。

user: user-6
content: main函数体位于程序代码末尾，无返回值，主要控制程序执行顺序，根据用户输入数值，并赋值给n，后面的跳转语句通过n的值决定执行哪个函数；main函数为程序入口函数，程序中必须存在的，否则编译器不知道从何处开始执行代码；而且main函数与自定义函数无区别，可以在自定义函数中调用，像之前几位说的，注意递归

user: user-0
content: 帮我看一下这个程序告诉我main（）是干嘛的？ #include<stdio.h> #include<stdlib.h> #include <string.h>  struct course { 	int num; 	char name[20]; 	char kind[10]; 	int time; 	int ttime; 	int etime; 	int mark; 	int term; }; struct student { 	int snum; 	int cnum; 	char cname[20]; };   /*课程信息录入*/ void insert() { 	void main(); 	FILE *fp; 	struct course c; 	int count; 	int i; 	if((fp=fopen("course.txt","a+"))==NULL) 	{ 		printf("cannot open file\n"); 	} 	printf("\n请输入课程门数:\n"); 	scanf("%d",&count); 	printf("课程编号  课程名称  课程性质  总学时  授课学时  实验或上机学时  学分  开课学期:\n"); 	for(i=0;i<count;i++) 	{     	scanf("%d %s %s %d %d %d %d %d",&c.num,&c.name,&c.kind,&c.time,&c.ttime,&c.etime,&c.mark,&c.term);     	fprintf(fp,"%d %s %s %d %d %d %d %d\n",c.num,c.name,c.kind,c.time,c.ttime,c.etime,c.mark,c.term); 	} 	fclose(fp); 	main(); }  /*课程信息浏览*/ void browser() { 	void main(); 	FILE *fp; 	struct course c; 	int a; 	if((fp=fopen("course.txt","r"))==NULL) 	{ 		printf("\nCannot open course!\n"); 	} 	printf("课程编号  课程名称  课程性质  总学时  授课学时  实验或上机学时  学分  开课学期:\n"); 	for(;!feof(fp);) 	{ 		fscanf(fp,"%d %s %s %d %d %d %d %d\n",&c.num,&c.name,&c.kind,&c.time,&c.ttime,&c.etime,&c.mark,&c.term); 		printf("%5d%12s%9s%9d%9d%11d%11d%11d\n",c.num,c.name,c.kind,c.time,c.ttime,c.etime,c.mark,c.term); 	} 	fclose(fp); 	printf("\n1-返回主菜单；2-退出选课系统\n"); 	scanf("%d",&a); 	if(a==1)     	main(); 	else 		exit(0); }  /*课程信息查询*/ void search() { 	void main(); 	FILE *fp; 	struct course c; 	int score; 	char kind[10]; 	int a; 	int b; 	printf("1.按学分查询,2.按课程性质查询.\n"); 	printf("请选择查询方式，输入选项数字："); 	scanf("%d",&b); 	if(b==1) 	{     	printf("\n请输入您要查询的学分:\n");     	scanf("%d",&score);      	if((fp=fopen("course.txt","r"))==NULL) 		{     		printf("\nCannot open course!\n"); 		}     	printf("课程编号  课程名称  课程性质  总学时  授课学时  实验或上机学时  学分  开课学期:\n");     	for(;!feof(fp);) 		{     	fscanf(fp,"%d%s%s%d%d%d%d%d\n",&c.num,&c.name,&c.kind,&c.time,&c.ttime,&c.etime,&c.mark,&c.term);     		if(c.mark==score) 		printf("%5d%12s%9s%9d%9d%11d%11d%11d\n",c.num,c.name,c.kind,c.time,c.ttime,c.etime,c.mark,c.term); 		} 	} 	else if(b==2){ 		printf("\n请输入您要查询的课程性质:\n");     	scanf("%s",&kind);      	if((fp=fopen("course.txt","r"))==NULL) 		{     		printf("\nCannot open course!\n"); 		}     	printf("课程编号  课程名称  课程性质  总学时  授课学时  实验或上机学时  学分 开课学期:\n");     	for(;!feof(fp);) 		{ 	fscanf(fp,"%d%s%s%d%d%d%d%d\n",&c.num,&c.name,&c.kind,&c.time,&c.ttime,&c.etime,&c.mark,&c.term); 		if(strcmp(c.kind,kind)==0) 		printf("%5d%12s%9s%9d%9d%11d%11d%11d\n",c.num,c.name,c.kind,c.time,c.ttime,c.etime,c.mark,c.term); 		} 	} 	else{ 		printf("输入错误！"); 		exit(1); 	} 	fclose(fp); 	printf("\n1-返回主菜单；2-退出选课系统\n"); 	scanf("%d",&a); 	if(a==1)     	main(); 	else 		exit(0); }  /*统计选课情况*/ void xuanke_information() { 	void main(); 	int total=0; 	int a; 	FILE *fp; 	struct student s; 	if((fp=fopen("student.txt","r"))==NULL) 	{ 		printf("\nCannot open student!\n"); 	} 	printf("   学号    课程编号    课程名称\n"); 	for(;!feof(fp);) 	{ 		fscanf(fp,"%d%d%s\n",&s.snum,&s.cnum,&s.cname); 			total++; 			printf("%7d%9d%13s\n",s.snum,s.cnum,s.cname); 	} 	printf("\n选课学生总人数为：%d 人",total); 	fclose(fp); 	printf("\n1-返回主菜单；2-退出选课系统\n"); 	scanf("%d",&a); 	if(a==1)     	main(); 	else 		exit(0); }  /*学生选修课程*/ void xuan_ke() { 	void main();     struct student s; 	struct course c; 	int a; 	FILE *fp; 	printf("\n请输入您的学号及您要选择的课程编号:"); 	scanf("%d%d",&s.snum,&s.cnum); 	if((fp=fopen("course.txt","r"))==NULL) 	{ 		printf("\nCannot open course!\n"); 	} 	for(;!feof(fp);) 	{ 		fscanf(fp,"%d %s %s %d %d %d %d %d\n",&c.num,&c.name,&c.kind,&c.time,&c.ttime,&c.etime,&c.mark,&c.term); 		if(s.cnum==c.num) 			break; 	} 	fclose(fp); 	if((fp=fopen("student.txt","a+"))==NULL) 	{ 		printf("\nCannot open student!\n"); 	} 	fprintf(fp,"%d %d %s\n",s.snum,s.cnum,c.name); 	fclose(fp); 	printf("\n1-返回主菜单；2-退出选课系统\n"); 	scanf("%d",&a); 	if(a==1)     	main(); 	else 		exit(0); }  /*主菜单*/ void main() { 	int n,w=0; 	printf("********************************************************************************\n"); 	printf("                                学生选课系统菜单                                \n"); 	printf("********************************************************************************\n"); 	printf("                                1-录入选课信息                                  \n"); 	printf("                                2-浏览选课信息                                  \n"); 	printf("                                3-查询选课信息                                  \n"); 	printf("                                4-统计选课情况                                  \n"); 	printf("                                5-进入选课操作                                  \n"); 	printf("                                0-退出选课系统                                  \n"); 	printf("********************************************************************************\n"); 	printf("                     请选择输入选择的功能:"); 	scanf("%d",&n);  	do 	{ 		if(n>5||n<0) 		{ 			printf("\n输入错误！请重新输入！\n"); 			scanf("%d",&n); 		} 		else w=1; 	}while(w==0);  	switch(n) 	{ 	case 1:insert();break; 	case 2:browser();break; 	case 3:search();break; 	case 4:xuanke_information();break; 	case 5:xuan_ke();break; 	case 0:exit(0); 	}  }

user: user-7
content: 递归调用main？？还是别这样比较好