2015-09-28 173 views
0

我是C編程語言的新手。我正在創建一個簡單的計算器程序,但由於某種原因,我的函數沒有返回正確的結果。這是我的程序:爲什麼我的計算器功能不能返回正確的結果?

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


int calculator(int x, char operator, int y); 
int main() 
{ 
    int x; 
    char operator; 
    int y; 

    printf("Enter an arithmetic experession: "); 
    scanf("%d%s%d", &x, &operator, &y); 

    int result = calculator(x, operator, y); 

    if(result == -1) 
    { 
     printf("Error! Try again!"); 
    } 
    else 
    { 

     printf("%d", result); 
    } 
    return 0; 


} 
int calculator(int x, char operator, int y) 
{ 
    int result = 0; 
    if(y = 0) 
    { 
     return -1; 
    } 

    if(operator == '+') 
    { 
     result = x + y; 
    } 
    else if(operator == '-') 
    { 
     result = x - y; 
    } 
    else if(operator == '*') 
    { 
     result = x * y; 
    } 
    else if(operator == '/') 
    { 
     result = x/y; 
    } 
    else if(operator == '%') 
    { 
     result = x % y; 
    } 
    else 
    { 
     return -1; 
    } 

    return result; 


} 

所以當我運行這個程序時,它要求一個算術表達式。如果我放入5 + 3,它只返回5!經過幾次測試,似乎無論如何它只返回第一個操作數。我想這是非常輕微的事情,但我沒有看到我錯過了什麼。

+1

C不支持_methods_,只有_functions_。如果你不知道差別,請不要使用該術語。 – Olaf

回答

1

兩個問題。第一種情況是,你正在閱讀的表達:

scanf("%d%s%d", &x, &operator, &y); 

operatorchar但您使用的%s格式說明這是一個字符串。這最終將運算符放入operator,但是隨後將NULL終止符添加到內存中的下一個字節。由於該字節不是operator的一部分,因此會導致未定義的行爲。

您想用%c來代替單個字符。

第二種情況是你正在做的y零位檢查:

if(y = 0) 

這是一個任務,而不是一個比較。值0被分配給y,則y被評估爲布爾值,其最終爲假。這就是爲什麼所有的表達式的值,就好像y爲0

更改爲分配:

if(y == 0) 
+0

謝謝,但現在它正在打印「錯誤!再試一次!」這意味着計算器出於某種原因正在返回-1,它應該只在y爲0時執行。 –

+1

@ user2817803您輸入'5 + 3'或'%d%c%d'而不是'%d%c%d' – BLUEPIXY

+0

@BLUEPIXY ok,所以我將它改爲'%d%c%d',它工作正常!謝謝 –

相關問題