gpt4 book ai didi

调用的对象类型 'void'不是函数或函数指针

转载 作者:行者123 更新时间:2023-11-30 16:28:02 25 4
gpt4 key购买 nike

该程序的设计本质上是接受用户输入的成绩并输出列出的各种函数。我遇到的主要问题是我的函数指针(processGrades)不起作用。它输出错误“调用的对象类型'void'不是函数或函数指针”。这不是指针的正确实现吗?可能是什么原因造成的?

#include <stdio.h>

void minimum(int students, int exams, int studentGrades[students][exams])
{
int lowGrade = 100;
size_t i, j;
for (i = 0; i < students; ++i) {
for (j = 0; j < exams; ++j) {
if (studentGrades[i][j] < lowGrade) {
lowGrade = studentGrades[i][j];
}
}
}
printf("Minimum grade : %d\n", lowGrade); // return minimum grade
return;
}

void maximum(int students, int exams, int studentGrades[students][exams])
{
int highGrade = 0; // initialize to lowest possible grade
size_t i, j;
for (i = 0; i < students; ++i) {
for (j = 0; j < exams; ++j) {
if (studentGrades[i][j] > highGrade) {
highGrade = studentGrades[i][j];
}
}
}
printf("Maximum grade : %d\n", highGrade); // return maximum grade
return;
}

void average(int students, int exams, int studentGrades[students][exams])
{
double total = 0.0; // sum of test grades
size_t i, j;
for (i = 0; i < students; ++i) {
for (j = 0; j < exams; ++j) {
total += studentGrades[i][j];
}
printf ("Average of student %lu : %f\n", i, total / exams); // average
total = 0;
}
return;
}

void printArray(int students, int exams, int studentGrades[students][exams])
{
size_t i, j;
printf("%s", " [0] [1] [2] [3]");
for (i = 0; i < students; ++i) {
printf("\nstudentGrades[%lu] ", i);
for (j = 0; j < exams; ++j) {
printf("%-5d", studentGrades[i][j]);
}
}
printf("\n");
return;
}

int main(void)
{
int choice;
int students;
int exams;
printf("Let's create a 2Dim array!\n\n");
printf("How many students? ");
scanf("%d", &students);
printf("\nHow many exams? ");
scanf("%d", &exams);
printf("\n");
int studentGrades[students][exams];
int i;
int j;
int entry;
for (i = 0; i < students; i++){
for (j=0; j < exams; j++) {
printf("enter [%d] [%d]: ", i,j);
scanf("%d",&entry);
studentGrades[i][j] = entry;
}
}
void (*processGrades[4]);
processGrades[0] = printArray;
processGrades[1] = minimum;
processGrades[2] = maximum;
processGrades[3] = average;
int stop = 0;
while(stop != 1) {
printf("Enter a choice:\n");
printf("0 Print the array of grades\n");
printf("1 Find the minimum grade\n");
printf("2 Find the maximum grade\n");
printf("3 Print the average on all tests for each student\n");
printf("4 End Program\n");
scanf("%d", &choice);
if(choice == 4){
stop = 1;
}
else{
(*processGrades[choice])(students)(exams)(studentGrades));
}
}
}

最佳答案

您可以typedef您的流程函数类型的函数指针:

typedef void (*processGradesFnPtr)(int, int, int [*][*]);

main中,您可以声明一个包含四个函数指针的数组并相应地分配它们。

processGradesFnPtr processGrades[4];
processGrades[0] = printArray;
processGrades[1] = minimum;
processGrades[2] = maximum;
processGrades[3] = average;

当你调用他们时,你必须这样称呼他们:

(*processGrades[choice])(students, exams, (studentGrades));

关于调用的对象类型 'void'不是函数或函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52547081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com