Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C代码错误不是函数或函数指针_C_Function Call - Fatal编程技术网

C代码错误不是函数或函数指针

C代码错误不是函数或函数指针,c,function-call,C,Function Call,我有下面的C代码。当我试图编译它时,会收到一条错误消息: called object 'countPassed' is not a function or function pointer" 我怎样才能解决这个问题 #include <stdio.h> int main() { int countWhoPassed, averageCalculate, printPassed; int amount = howManygrades(); storesGra

我有下面的C代码。当我试图编译它时,会收到一条错误消息:

called object 'countPassed' is not a function or function pointer"
我怎样才能解决这个问题

#include <stdio.h>

int main()
{
    int countWhoPassed, averageCalculate, printPassed;
    int amount = howManygrades();
    storesGrades(amount);
    printAll(amount);
    averageCalculate = averageCalc(amount);
    printAverage(amount);
    countWhoPassed = countPassed(amount);
    printPassed = printWhoPassed(amount);
    return 0;
}

int howManygrades()
{
    int gradesAmount;
    printf("How many grades do you want?\n");
    scanf("%d", &gradesAmount);
    while (gradesAmount > 10) {
        printf("Sorry, this amount of numbers is too big for the array.");
        scanf("%d", &gradesAmount);
        while (gradesAmount < 0) {
            printf("Sorry, this amount of numbers is too small for the array.");
            scanf("%d", &gradesAmount);
        }
    }
    while (gradesAmount < 0) {
        printf("Sorry, this amount of numbers is too small for the array.");
        scanf("%d", &gradesAmount);
        while (gradesAmount > 10) {
            printf("Sorry, this amount of numbers is too big for the array.");
            scanf("%d", &gradesAmount);
        }
    }

    return gradesAmount;
}

void storesGrades(int amount)
{
    int iterator;
    float grade;
    for (iterator = 0; iterator < amount; iterator++)
    {

        printf ("Enter another grade.");
        scanf("%f", &grade);
        while ((grade <= 0.0) || (grade > 10.0))
        {
            printf("Sorry, this number is not valid.");
            scanf("%f", &grade);
        }
        grades[iterator] = grade;
    }
}

void printAll(int amount)
{
    int iterator;
    for (iterator = 0; iterator < amount; iterator++)
    {
        printf("%.1f\n", grades[iterator]);
    }
}

int averageCalc(int amount)
{
    float sum, averageResult, average;
    int iterator;
    sum = 0.0;
    for (iterator = 0; iterator < amount; iterator++) {
        sum += grades[iterator];
    }
    average = sum / (float)amount;
    return average;
}

void printAverage(int amount)
{
    float printThisAverage = averageCalc(amount);
    printf("%.2f", printThisAverage);
}

int countPassed(int amount)
{
    int iterator, countPassing;
    countPassing = 0;
    for (iterator = 0; iterator < amount; iterator++)
    {
        if (grades[iterator] >= 5.5)
        {
            countPassing++;
        }
    }
    return countPassing;
}

int printWhoPassed(int amount)
{
    int returnValue = countPassed(amount);
    return returnValue;
}
#包括
int main()
{
int countwhowpassed、averageCalculate、printPassed;
int amount=多少等级();
仓库等级(金额);
打印全部(金额);
averageCalculate=averageCalc(金额);
平均(金额);
countWhoPassed=countPassed(金额);
printPassed=printWhoPassed(金额);
返回0;
}
int howManygrades()
{
国际等级山;
printf(“您想要多少等级?\n”);
scanf(“%d”、&gradesAmount);
而(等级数>10){
printf(“对不起,这个数字对于数组来说太大了。”);
scanf(“%d”、&gradesAmount);
while(gradesAmount<0){
printf(“对不起,这个数字对于数组来说太小了。”);
scanf(“%d”、&gradesAmount);
}
}
while(gradesAmount<0){
printf(“对不起,这个数字对于数组来说太小了。”);
scanf(“%d”、&gradesAmount);
而(等级数>10){
printf(“对不起,这个数字对于数组来说太大了。”);
scanf(“%d”、&gradesAmount);
}
}
返回等级计数;
}
无效存储等级(整数金额)
{
整数迭代器;
浮子等级;
for(迭代器=0;迭代器=5.5)
{
countPassing++;
}
}
回程通行;
}
已通过的整数printWhoPassed(整数金额)
{
int returnValue=countPassed(金额);
返回值;
}

似乎有几个问题。我认为您收到的错误消息很奇怪,应该说
countPassed
未定义。那是因为你在调用它之后定义了它。您可以通过在调用函数之前为其添加原型来修复它。通过这种方式,您可以告诉编译器函数的存在(还没有定义函数),然后它将编译。对我来说,它通过在主代码之前向代码中添加以下原型来工作:

int countPassed(int amount);
void printAll(int amount);
void printAverage(int amount);
void storesGrades(int amount);
或者,您可以将
main
函数放在所有其他函数之后。当然,这在实际项目中并不总是一个选项

此外,
等级
没有定义。我假设您需要一个
int
数组,因此添加类似
int grades[10]
的内容应该可以做到这一点(在本例中,最多可以使用10个级别,也可以动态分配该内存以允许用户想要的任何数量)


此外,我还必须添加
#include“stdio.h”
,以便使用
printf
进行编译,尽管有些编译器不会介意它是否丢失

似乎有几个问题。我认为您收到的错误消息很奇怪,应该说
countPassed
未定义。那是因为你在调用它之后定义了它。您可以通过在调用函数之前为其添加原型来修复它。通过这种方式,您可以告诉编译器函数的存在(还没有定义函数),然后它将编译。对我来说,它通过在主代码之前向代码中添加以下原型来工作:

int countPassed(int amount);
void printAll(int amount);
void printAverage(int amount);
void storesGrades(int amount);
或者,您可以将
main
函数放在所有其他函数之后。当然,这在实际项目中并不总是一个选项

此外,
等级
没有定义。我假设您需要一个
int
数组,因此添加类似
int grades[10]
的内容应该可以做到这一点(在本例中,最多可以使用10个级别,也可以动态分配该内存以允许用户想要的任何数量)


此外,我还必须添加
#include“stdio.h”
,以便使用
printf
进行编译,尽管有些编译器不会介意它是否丢失

自从您第一次使用函数
countPassed
以来:

countWhoPassed = countPassed(amount);
函数的定义要晚得多,编译器还不知道如何处理这样的函数。因此,由于尚未声明原型,编译器不知道
countPassed()
返回int。因此,如果没有该信息,编译器假定

countWhoPassed = countPassed(amount);
正在尝试将函数指针
countPassed(int)
分配给变量
countWhoPassed
。但后来它发现它也不知道这样的函数

但是,在还没有看到这个函数原型的情况下,编译器应该如何更好地了解它呢

因此,在函数首次出现之前,让编译器知道该函数应该是什么样子

简单地说

int countPassed(int amount);
在声明和包含区域中,以便编译器知道如何处理该标识符

或者作为一个高级选项,在头文件中声明它并包含该头文件

免责声明:我没有运行代码,也没有检查其他错误。我刚刚回答了您询问的具体错误。

自第一次使用y以来