C和学习新手。我一直收到错误(C2664:'int readScores(int,int,int)':无法将参数1从'int *'转换为'int')。我不知道如何解决它。我试过查找但不理解错误代码...... 我该如何解决? 此外,代码上的任何指针和/或提示将不胜感激。 谢谢
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
// Functions
int readScores(int test1, int test2, int test3);
int determineGrade(int test1, int test2, int test3);
void print(int test1, int test2, int test3);
int main(void)
{
int test1;
int test2;
int test3;
readScores(&test1, &test2, &test3);
determineGrade(test1, test2, test3);
print(test1, test2, test3);
return 0;
}
void readScores(int *test1, int *test2, int *test3)
{
// Promts
printf("Hello, this program will determine");
printf("the grades of average test scores");
printf("to see if you passed or not this year.");
printf("Please enter in the three test...");
printf("Note: only enter scores that are (0-100)");
printf("Enter in test1\n");
scanf("%d", test1);
printf("Enter in test2\n");
scanf("%d", test2);
printf("Enter in test 3\n");
scanf("%d", test3);
return;
}
int determineGrade(int test1, int test2, int test3)
{
// Local declrations
int average;
// Math
average = 3 / (test1 + test2 + test3);
return average;
}
void print(int test1, int test2, int test3)
{
int Grade;
Grade = determineGrade(test1, test2, test3);
if (Grade > 90)
{
printf("Great job you have an A %d int the class\n", Grade);
return;
}
else if (70 < Grade > 90, test3)
{
if (test3 < 90)
{
printf("Good job you got a A %d\n", Grade);
return;
}
else
{
printf("Easy Beezy you got a B %d for the class\n", Grade);
return;
}
return;
}
else if (50 < Grade > 70, test2, test3)
{
Grade = 2 / (test2 + test3);
if (Grade > 70)
{
printf("You passed congrats you have a C %d for the class\n", Grade);
return;
}
else
{
printf("You have a D for the class %d\n", Grade);
return;
}
}
else if (Grade < 50)
{
printf("Yeah you might want to take this class again you have a F %d\n", Grade);
return;
}
return;
}
答案 0 :(得分:2)
你必须制作函数原型,例如
int readScores(int test1, int test2, int test3);
匹配实际的功能实现:
void readScores(int *test1, int *test2, int *test3)
详细说明一下。程序中的数据流很好,你在main中声明了三个变量,将指针作为参数传递给readScores
然后将修改它们。然后将变量用于打印和计算。因此,您唯一的问题是,当您使用三个int指针实现它时,首先错误地告诉编译器“readScores有三个int参数”。
答案 1 :(得分:0)
int readScores(int test1, int test2, int test3);
方法是用int类型声明的,但你用指针定义(并调用)它。
将声明更改为int readScores(int* test1, int* test2, int* test3);
答案 2 :(得分:0)
在main
中,无需拨打电话
determineGrade(test1, test2, test3);
正如你所说的那样并且在你的打印功能中真正使用过它。此外,determineGrade
功能似乎有点偏差。对于平均值,您希望等级的总和在分子中,而3则在分母中:
average = (test1 + test2 + test3) / 3;
虽然在取0-100的等级平均值时没有必要,但在将来取平均值时,最好将分子的每一部分分开并用分母分开然后加上它们:
average = (test1 / 3) + (test2 / 3) + (test3 / 3);
如果您的分母术语总和大于MAX_INT
,则可以避免溢出。