代码瑕疵望理解
报错显示:[Error] invalid conversion from 'int' to 'int (*)[4]' [-fpermissive]
Windows11,使用c++dev5.11编译器
感谢指点
报错句已用注释标出
#include<stdio.h>
#define STUDENT 3
#define EXAMS 4
void printArray(int grades[][EXAMS], int pupils, int tests);
void minimum(int grades[][EXAMS], int pupils, int tests);
void maximum(int grades[][EXAMS], int pupils, int tests);
void average(int grades[][EXAMS], int pupils, int tests);
int main()
{ int studentGrades[STUDENT][EXAMS]=
{{77,68,86,73},
{96,87,89,78},
{70,90,86,81}};
int choice=0;
void (*processGrades[4])( int grades[][EXAMS], int pupils, int tests) = {printArray,minimum,maximum,average};
puts("Enter a choice:");
puts(" 0 Print the array of grades");
puts(" 1 Find the minimum grade");
puts(" 2 Find the maximum grade");
puts(" 3 Print the average on all tests for each student");
puts(" 4 End program");
printf("please enter your choice:");
scanf("%d",&choice);
//下句报错
//下句报错
//下句报错
(*processGrades[choice])(studentGrades[STUDENT][EXAMS],STUDENT,EXAMS);//此句报错
}
void printArray(int grades[][EXAMS], int pupils, int tests)
{printf("%s"," [0] [1] [2] [3]");
for(int i = 0;i < pupils; i++){
printf("\nstdentGrades[%d]", i);
for(int j = 0;j < tests;j++){
printf("%-5d",grades[i][j]);
}
}
}
void minimum(int grades[][EXAMS], int pupils, int tests)
{int lowGrade = 100;
for(int i = 0;i < pupils;++i){
for(int j = 0;j < tests;++j){
if(grades[i][j] < lowGrade){
lowGrade = grades[i][j];
}
}
}
printf("\nLowset grade: %d",lowGrade);
}
void maximum(int grades[][EXAMS], int pupils, int tests)
{int highGrade = 0;
for(int i = 0;i < pupils;++i){
for(int j = 0;j < tests;++j){
if(grades[i][j] > highGrade){
highGrade = grades[i][j];
}
}
}
printf("\nHighest grade: %d",highGrade);
}
void avrage(int grades[][EXAMS], int pupils, int tests)
{for(int i = 0;i < pupils;++i){
int total = 0;
for(int j = 0;j < tests;++j){
total += grades[i][j];
}
printf("The average grade for student %d is %.2f\n",i,total/EXAMS);
}
}