C代码错误不是函数或函数指针
我有下面的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
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以来