2015-09-28 171 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',它工作正常!谢谢 –

相关问题