user-0 提问: 为什么程序每个函数都出现同样的错误，missing ')' before identifier 'st'

回复:
user: user-0
content: 经过前面几个大神的提醒帮助，我找出所有问题了，主要是变量声明放错位置了,以及struct关键字缺漏，下面是我改完后完整的代码 #include "stdio.h" #include "string.h" #include "stdlib.h" #define N 7 struct student { 	char name[20];//姓名 	char no[10];//学号 	int math;//数学分数 	int english;//英语分数 	int computer;//计算机分数 	int score;//交换用分数 	int eveave;//个人平均分 };   struct student st[N];         //定义学生结构体 void subject(struct student st[],int n)//选定某个学科进行分析 { 	  	int number; 	int temp; 	int i=0; 	int j; 	float sum=0; 	float courseave; 	int max=st[0].score; 	int min=st[0].score; 	int bjg=0; 	int jg=0; 	int zd=0;  	int lh=0; 	int yx=0; 	printf("        请选择要分析的学科: "); 	scanf("%d",&number); 	 	switch(number) 	{ 		case 1: 			printf("       ★★★★★★★★★以下是关于数学的成绩分析：★★★★★★★★★★\n"); 			for(i=0;i<n;i++) 			st[i].score=st[i].math; 			break; 		case 2: 			printf("       ★★★★★★★★★以下是关于英语的成绩分析：★★★★★★★★★★\n"); 			for(i=0;i<n;i++) 			st[i].score=st[i].english;  			break; 		case 3: 			printf("       ★★★★★★★★★以下是关于计算机成绩分析：★★★★★★★★★★\n"); 			for(i=0;i<n;i++) 			st[i].score=st[i].computer; 			break; 	} 		 		printf("        按学号每个人的原始数据为:\n"); 		for(i=0;i<n;i++) 			printf("        %d\n",st[i].score); 		printf("        排序后的数据为\n"); 		for(i=0;i<n-1;i++) 		{ 			 			for(j=0;j<n-i;j++) 				if(st[j+1].score<st[j].score) 				{ 					temp=st[j].score; 					st[j].score=st[j+1].score; 					st[j+1].score=temp; 				} 		} 		for(i=0;i<n;i++) 			printf("        %d\n",st[i].score); 		printf("        该门课的平均成绩为：\n");  		for(i=0;i<n;i++) 		{ 			sum=sum+st[i].score; 		} 		courseave=sum/7; 		printf("        %f\n",courseave); 		printf("        该门课的最高分为：\n");  		for(i=0;i<n;i++) 		{ 			if(st[i].score>max) 			{ 				max=st[i].score; 			} 		} 		printf("        %d\n",max);//最高分 		printf("        该门课的最低分为：\n");  		for(i=0;i<n;i++) 		{ 			if(st[i].score<min) 			{ 				min=st[i].score; 			} 		} 		printf("        %d\n",min);//最低分  		for(i=0;i<n;i++) 		{ 			if(st[i].score<60)    //计算不及格人数 			{ 				bjg++; 			} 			if(st[i].score>=60&&st[i].score<70)//计算60~69人数 			{ 				jg++; 			} 			if(st[i].score>=70&&st[i].score<80)//计算70~79人数 			{ 				zd++; 			} 			if(st[i].score>=80&&st[i].score<90)//计算80~89人数 			{ 				lh++; 			} 			if(st[i].score>=90)//计算90分以上人数 			{ 				yx++; 			} 		} 		printf("        该门课的不及格人数为：\n        %d\n        60~69人数：\n        %d\n        70~79人数：\n        %d\n        80~89人数：\n        %d\n        90分以上人数：\n        %d\n",bjg,jg,zd,lh,yx); 		  	 } void studentave(struct student st[],int n)//计算每个人的平均成绩并排序 { 	int i; 	int j; 	int temp; 	for(i=0;i<n;i++) 	{ 		st[i].eveave=(st[i].math+st[i].english+st[i].computer)/4; 	} 	printf("        每个人平均成绩为：\n"); 	for(i=0;i<n;i++)		 	printf("        %d\n",st[i].eveave);  	for(i=0;i<n-1;i++) 	{ 		for( j=0;j<n-1-i;j++) 			if(st[j].eveave>st[j+1].eveave) 				{ 					temp=st[j].eveave; 					st[j].eveave=st[j+1].eveave; 					st[j+1].eveave=temp; 				} 	} 	printf("        平均成绩排序为：\n"); 	for(i=0;i<n;i++) 		printf("        %d\n",st[i].eveave); }  void nosearch(struct student st[],int n)//按学号查找学生的各门成绩 { 	int i=0; 	char no[10]; 	n=7; 	 	printf("        请输入要查找的学生号:"); 		scanf("%s",&no); 		while(strcmp(no,st[i].no)==0&&i<n) 			i++; 		if(i==n) 		{ 			printf("        meizhaodao\n"); 		} 		else 			printf("        %s\t%s\t%d\t%d\t%d\n",st[i].no,st[i].name,st[i].math,st[i].english,st[i].computer); } void namesearch(struct student st[],int n)//按姓名查找学生的各门成绩 { 	char name[20]; 	int i=0; 	n=7; 	 	printf("        请输入要查找的姓名:"); 		scanf("%s",&name); 		while(strcmp(name,st[i].name)==0&&i<7) 		i++; 		if(i==n) 		{ 			printf("        meizhaodao\n"); 		} 		else 			printf("        %s\t%s\t%d\t%d\t%d\n",st[i].no,st[i].name,st[i].math,st[i].english,st[i].computer); } void cunchu(struct student st[],int n)    //存盘 { 	int i; 	FILE *fp; 	fp=fopen("G:\\input.dat","wb");//以"写"方式打开一个二进制文件 	if(fp==NULL) 	{ 		printf("Can't open!\n"); 		exit(0); 	} 	 	for(i=0;i<n;i++) 	{ 		fwrite(&st[i],sizeof(struct student),1,fp);//一次写入一个学生的成绩 	} 	fclose(fp); } void duqu(struct student st[],int n)      //读取数据 { 	int i; 	FILE *fp; 	fp=fopen("G:\\input.dat","rb");//以"读"方式打开一个二进制文件 	if(fp==NULL)	 	{ 		printf("Can't open!\n"); 		exit(0); 	} 	for(i=0;i<7;i++) 	{ 		fread(&st[0],sizeof(struct student),1,fp);//一次读取一个学生的成绩 		printf("                  %s\t%s\t%d\t%d\t%d\n",st[i].no,st[i].name,st[i].math,st[i].english,st[i].computer); 	} 	fclose(fp); }  void main() { 	struct student st[7]={  {"01","王芳",78,77,90}, 							{"02","张强",89,67,88}, 							{"03","李浩",56,66,78}, 							{"04","黄鹏",89,86,85}, 							{"05","尚校",67,88,76}, 							{"06","赵鹏",45,54,67}, 							{"07","蒋泽",78,76,70}}; 	printf("   ★★★★★★★★★★★★本题的实验数据为数据：★★★★★★★★★★★★★★\n"); 	cunchu(st,7);//存盘input.dat 	duqu(st,7);//读取数据 	printf("   ★★★★★★★★★★★★对各科的成绩分析如下：★★★★★★★★★★★★★★\n"); 	printf("        本实验采取switch()语句，分别1~3中的表示不同的学科\n        输入1表示计算关于数学方面的成绩；\n        输入2表示计算关于英语方面的成绩；\n        输入3表示计算关于计算机方面的成绩；\n"); 	subject(st,7);//按各科成绩排序 	subject(st,7);//按各科成绩排序 	subject(st,7);//按各科成绩排序 	printf("   ★★★★★★★★★★★★关于个人平均成绩分析：★★★★★★★★★★★★★★\n"); 	studentave(st,7);//计算每个人的平均成绩并排序 	printf("   ★★★★★★★★★★★★按照不同条件查询分析：★★★★★★★★★★★★★★\n"); 	nosearch(st,7);//按学号查找学生的各门成绩 	namesearch(st,7);//按姓名查找学生的各门成绩  }

user: user-1
content: void subject(student st[],int n)  改成：  void subject(struct student st[],int n)  C语言要求加上struct关键字  同理其他地方的

user: user-2
content: 引用 4 楼 l357630798 的回复:你使用的是C++编译器还是C编译器？  如果是C++编译器，你的代码是没问题的。  如果是C编译器，那么就是有问题的。 void subject(struct student st[],int n) 函数参数前也要加struct关键字 for(int j=0;j<n-1-i;j++)  不能这样定义变量j ;   要int j = 0; 单独定义。 nosearch  函数里面的变量n与参数重名了。  问题很多，你自己找一下吧。  补充，我的意思是如果C++编译器，void subject(struct student st[],int n) 函数参数前不需要加struct关键字。

user: user-2
content: 你使用的是C++编译器还是C编译器？  如果是C++编译器，你的代码是没问题的。  如果是C编译器，那么就是有问题的。 void subject(struct student st[],int n) 函数参数前也要加struct关键字 for(int j=0;j<n-1-i;j++)  不能这样定义变量j ;   要int j = 0; 单独定义。 nosearch  函数里面的变量n与参数重名了。  问题很多，你自己找一下吧。

user: user-3
content: #if 0 #include "stdio.h" #include "string.h" #include "stdlib.h" #endif #include <stdio.h> #include <stdlib.h> #include <string.h>  #define N 7 #define MAX_STU_NUM 7  struct student {     char name[20];  //姓名     char no[10];    //学号     int math;       //数学分数     int english;    //英语分数     int computer;   //计算机分数     int score;      //交换用分数     int eveave;     //个人平均分 }; struct student st[N];         //定义学生结构体 void subject(struct student st[],int n)//选定某个学科进行分析 {      int number;     int temp;     printf("        请选择要分析的学科: ");     scanf("%d", &number);     int i=0;     switch(number)     {         case 1:             printf("     以下是关于数学的成绩分析：\n");             for(i=0;i<n;i++)                 st[i].score=st[i].math;             break;         case 2:             printf("       以下是关于英语的成绩分析：\n");             for(i=0;i<n;i++)                 st[i].score=st[i].english;              break;         case 3:             printf("      以下是关于计算机成绩分析：\n");             for(i=0;i<n;i++)                 st[i].score=st[i].computer;             break;     }     int j;     printf("        按学号每个人的原始数据为:\n");     for(i=0;i<n;i++)         printf("        %d\n",st[i].score);     printf("        排序后的数据为\n");     for(i=0;i<n-1;i++)     {          for(j=0;j<n-i;j++)             if(st[j+1].score<st[j].score)             {                 temp=st[j].score;                 st[j].score=st[j+1].score;                 st[j+1].score=temp;             }     }     for(i=0;i<n;i++)         printf("        %d\n",st[i].score);     printf("        该门课的平均成绩为：\n");     float sum=0;     float courseave;     for(i=0;i<n;i++)     {         sum=sum+st[i].score;     }     courseave=sum/7;     printf("        %f\n",courseave);     printf("        该门课的最高分为：\n");     int max=st[0].score;     for(i=0;i<n;i++)     {         if(st[i].score>max)         {             max=st[i].score;         }     }     printf("        %d\n",max);//最高分     printf("        该门课的最低分为：\n");     int min=st[0].score;     for(i=0;i<n;i++)     {         if(st[i].score<min)         {             min=st[i].score;         }     }     printf("        %d\n",min);//最低分     int bjg=0;     int jg=0;     int zd=0;     int lh=0;     int yx=0;     for(i=0;i<n;i++)     {         if(st[i].score<60)    //计算不及格人数         {             bjg++;         }         if(st[i].score>=60&&st[i].score<70)//计算60~69人数         {             jg++;         }         if(st[i].score>=70&&st[i].score<80)//计算70~79人数         {             zd++;         }         if(st[i].score>=80&&st[i].score<90)//计算80~89人数         {             lh++;         }         if(st[i].score>=90)//计算90分以上人数         {             yx++;         }     }     printf("该门课的不及格人数为：\n %d\n60~69人数：\n%d\n70~79人数：\n%d\n80~89人数：\n %d\n90分以上人数：\n%d\n",bjg,jg,zd,lh,yx);    } void studentave(struct student st[],int n)//计算每个人的平均成绩并排序 {     int i, j;     int temp;     for(i = 0; i < n; i++) {         st[i].eveave=(st[i].math+st[i].english+st[i].computer)/4;     }     printf("        每个人平均成绩为：\n");     for(i=0;i<n;i++)         printf("        %d\n",st[i].eveave);      for(i = 0; i < n-1; i++)     {         for(j = 0; j < n-1-i; j++)             if(st[j].eveave > st[j+1].eveave)             {                 temp=st[j].eveave;                 st[j].eveave=st[j+1].eveave;                 st[j+1].eveave=temp;             }     }     printf("        平均成绩排序为：\n");     for(i=0;i<n;i++)         printf("        %d\n",st[i].eveave); }  void nosearch(struct student st[],int n)//按学号查找学生的各门成绩 {     int i=0;     n=7;     char no[10];     printf("        请输入要查找的学生号:");     scanf("%s",no);     while(strcmp(no,st[i].no)==0&&i<n)         i++;     if(i==n)     {         printf("        meizhaodao\n");     }     else         printf("        %s\t%s\t%d\t%d\t%d\n",st[i].no,st[i].name,st[i].math,st[i].english,st[i].computer); } void namesearch(struct student st[],int n)//按姓名查找学生的各门成绩 {     int i=0;     n=7;     char name[20];     printf("        请输入要查找的姓名:");     scanf("%s", name);     while(strcmp(name,st[i].name)==0&&i<7)         i++;     if(i==n)     {         printf("        meizhaodao\n");     }     else         printf("        %s\t%s\t%d\t%d\t%d\n",st[i].no,st[i].name,st[i].math,st[i].english,st[i].computer); } void cunchu(struct student st[],int n)    //存盘 {     int i;     FILE *fp;     fp=fopen("C:\\RJ\\input.dat","wb");//以"写"方式打开一个二进制文件     if(fp==NULL)     {         printf("Can't open!\n");         exit(0);     }      for(i=0;i<n;i++)     {         fwrite(&st[i],sizeof(struct student),1,fp);//一次写入一个学生的成绩     }     fclose(fp); } void duqu(struct student st[],int n)      //读取数据 {     int i;     FILE *fp;     fp=fopen("C:\\RJ\\input.dat","rb");//以"读"方式打开一个二进制文件     if(fp==NULL)     {         printf("Can't open!\n");         exit(0);     }     for(i=0;i<7;i++)     {         fread(&st[0],sizeof(struct student),1,fp);//一次读取一个学生的成绩         printf("                  %s\t%s\t%d\t%d\t%d\n",st[i].no,st[i].name,st[i].math,st[i].english,st[i].computer);     }     fclose(fp); }  int main(int argc, const char *argv[]) {     struct student st[7]={  {"01","王芳",78,77,90},         {"02","张强",89,67,88},         {"03","李浩",56,66,78},         {"04","黄鹏",89,86,85},         {"05","尚校",67,88,76},         {"06","赵鹏",45,54,67},         {"07","蒋泽",78,76,70}};     printf(" 本题的实验数据为数据：\n");     cunchu(st,7);//存盘input.dat     duqu(st,7);//读取数据     printf("  对各科的成绩分析如下：\n");     printf("        本实验采取switch()语句，分别1~3中的表示不同的学科\n        输入1表示计算关于数学方面的成绩；\n        输入2表示计算关于英语方面的成绩；\n        输入3表示计算关于计算机方面的成绩；\n");     subject(st,7);//按各科成绩排序     subject(st,7);//按各科成绩排序     subject(st,7);//按各科成绩排序     printf("   关于个人平均成绩分析：\n");     studentave(st,7);//计算每个人的平均成绩并排序     printf("   按照不同条件查询分析：\n");     nosearch(st,7);//按学号查找学生的各门成绩     namesearch(st,7);//按姓名查找学生的各门成绩     return 0; }   主要是两个问题: 1)函数参数没有类型, student不是类型,所以需要加上struct;2) scanf的第二个参数如果是数组,不需要再加&； 以上是我改后的代码,你对比一下吧

user: user-0
content: 不对呀大兄弟

user: user-2
content: struct student st[7];  把struct去掉； student 已经是一种数据类型了，不需要再使用struct关键字，谢谢！