C错误无法将参数1从int *转换为int

时间:2014-03-01 03:08:05

标签: c if-statement for-loop int

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;
}

3 个答案:

答案 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,则可以避免溢出。