2015-09-28 99 views
0

我對此很新,我嘗試過所有的東西,但是我不能讓它工作,無論我改變什麼,它都只顯示「無效的數學運算」。請幫我解決這個問題。函數不顯示計算的答案

#include <stdio.h> 
#include <math.h> 

int fnCalculate (int fn, int sn); 

int main() 
{ 
    int fn, sn; 
    char op; 
    printf("Enter 2 interger values and math operation [+] [-] [*] : "); 
    scanf("%d %d %c", &fn, &sn, &op); 
    printf("%d", fnCalculate(fn,sn)); 
    getch(); 
    return 0; 

} 
int fnCalculate (int fn, int sn) 
{ 
char op; 
switch(op){ 

case '+' : printf("%d + %d = %d", fn, sn, fn+sn);break; 
case '-' : printf("%d - %d = %d", fn, sn, fn-sn);break; 
case '*' : printf("%d * %d = %d", fn, sn, fn*sn);break; 
default : printf("Invalid Math Operation");break; 

} 
} 
+4

你需要將'op'傳遞給函數 - 它不是全局的.. – amdixon

回答

3

您必須將操作字符發送到函數。函數中的op未初始化並保存垃圾值。

void fnCalculate (int fn, int sn, char op) 
{ 
    switch(op){ 

    case '+' : printf("%d + %d = %d", fn, sn, fn+sn);break; 
    case '-' : printf("%d - %d = %d", fn, sn, fn-sn);break; 
    case '*' : printf("%d * %d = %d", fn, sn, fn*sn);break; 
    default : printf("Invalid Math Operation");break; 
    } 
} 

這樣稱呼它:

fnCalculate(fn,sn,op); 

而且,它應該返回一個int值。它沒有返回任何東西,所以還有另一個問題。或者將簽名更改爲void,只需調用該功能,而不是在printf中。

+0

哦,是的。對於那個很抱歉。 – vish4071

+2

建議在示例中也將返回類型更改爲void,或者至少返回示例 – amdixon

+0

哦,是的。我會爲此編輯。 @amdixon – vish4071

1

您還需要更改函數定義以接受op的值,並且在調用時需要傳遞值op。否則,在您當前的功能中,

char op; 
switch(op){ 

正在嘗試讀取調用未定義行爲的未初始化自動局部變量。

+0

歡呼聲,@dilipkumar –

+0

歡迎您@Sourav –