2014-03-01 59 views
1

新的C和學習。我不斷收到錯誤(C2664:'int readScores(int,int,int)':無法將參數1從'int *'轉換爲'int')。我不知道如何解決這個問題。我嘗試過查找它,但不明白錯誤代碼... 我該如何解決它? 任何指針和/或代碼的提示將不勝感激。 感謝C錯誤不能將參數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

您的'readScores'聲明與'readScores'的定義不符。參數類型不同。即使是返回類型也不同。這沒有意義。你想通過做出不匹配的定義來做什麼?你是代碼的作者嗎? – AnT

回答

0

int readScores(int test1, int test2, int test3);方法聲明爲int類型,但是你定義(和調用),它的指針。

變更申報爲int readScores(int* test1, int* test2, int* test3);

+0

更改scanf調用是錯誤的 - 它需要一個地址,而不是int。 –

+0

@JimBalter我不好,謝謝你指出。 –

2

您必須進行函數原型,例如

int readScores(int test1, int test2, int test3); 

符合實際的功能實現:

void readScores(int *test1, int *test2, int *test3) 

要詳細一點。程序中的數據流很好,你在main中聲明瞭三個變量,並將那些指針作爲參數傳遞給readScores,然後它們將修改它們。這些變量然後用於打印和計算。所以你唯一的問題是,當你用三個int指針實現它時,你首先錯誤地告訴編譯器「readScores有三個int參數」。

0

main,沒有必要調用

determineGrade(test1, test2, test3); 

,你叫真正把它用在你的打印功能。此外,determineGrade函數似乎有點關閉。對於一般的,你想要的成績的總和是在分子和3是在分母:從0-100採取評分的平均值時,在服用時平均

average = (test1 + test2 + test3)/3; 

雖然不是必需的未來,這將是很好走分子的各個部分和分母分別除以它們,然後將它們添加:

average = (test1/3) + (test2/3) + (test3/3); 

這避免溢出,如果你的分母項可以總結爲大於MAX_INT

相關問題