皇天在上 发表于 2018-7-26 16:02:04

帮我看看错哪啦

本帖最后由 皇天在上 于 2018-7-26 16:03 编辑

写一个最简单的计算器,支持四则运算。
#include <stdio.h>
#include <math.h>

int main()
{
        double a, b , answer;
      char c;
       
       
        printf("请输入式子:");
        scanf("%d%c%d", &a, &c, &b);
       
        if('c' == '+')
        {
                answer = a +b;
                printf("%.2f + %.2f = %.2f", a, b, answer);
        }
        else if (c == '-')
        {
                answer = a- b;
                printf("%.2f - %.2f = %.2f", a, b, answer);
        }
        else if ('c' == '*')
        {
                answer = a * b;
                printf("%.2f * %.2f = %.2f", a, b, answer);
        }
        else if ('c' == '/')
        {
                if (b = 0)
                {
                        printf("很遗憾,除数不能为零!");
                }
                else
                {
                answer = a / b;
                printf("%.2f / %.2f = %.2f", a, b, answer);
        }
        }
        else
        {
                printf("请输入正确的式子");
        }
   return 0;       
}

weizhongyang 发表于 2018-7-26 16:02:05

同学,
if条件判断不对,字符比较应该用c=='+'; c=='-'; c=='*'; c=='/'
还有输入的格式不对,应该用scanf("%lf %c %lf", &num1, &c, &num2);中间加个空格比较好点

改进下你的代码,可以参考下:
#include<stdio.h>
#include<math.h>

int main(int argc, char **argv)
{
        double num1, num2, result;
        char c;

        printf("input (eg:10-3):");
        scanf("%lf %c %lf", &num1, &c, &num2);
        if (c=='+')
        {
                result = num1+num2;
                printf("%.2f + %.2f = %.2f\n", num1, num2, result);
        }
        else if (c=='-')
        {
                result = num1-num2;
                printf("%.2f - %.2f = %.2f\n", num1, num2, result);
        }
        else if (c=='*')
        {
                result = num1*num2;
                printf("%.2f * %.2f = %.2f\n", num1, num2, result);
        }
        else if (c=='/')
        {
                result = num1/num2;
                printf("%.2f / %.2f = %.2f\n", num1, num2, result);
        }
        else
        {
                printf("input format is worng!\n");
        }
        return 0;
}

测试如:

baiyang@UbYang:~/ubshare/testcode$ gcc calu.c -o exe
baiyang@UbYang:~/ubshare/testcode$ ./exe
input (eg:10-3):10 - 3
10.00 - 3.00 = 7.00
baiyang@UbYang:~/ubshare/testcode$ ./exe
input (eg:10-3):10 + 3
10.00 + 3.00 = 13.00
baiyang@UbYang:~/ubshare/testcode$ ./exe
input (eg:10-3):10 * 3
10.00 * 3.00 = 30.00
baiyang@UbYang:~/ubshare/testcode$ ./exe
input (eg:10-3):10 / 3
10.00 / 3.00 = 3.33

BngThea 发表于 2018-7-26 16:22:03

ab都是double,在scnaf中用%lf接收输入

皇天在上 发表于 2018-7-26 16:33:15

BngThea 发表于 2018-7-26 16:22
ab都是double,在scnaf中用%lf接收输入

不管怎样,都是打印出:不是正确的式子。

BngThea 发表于 2018-7-26 16:41:34

皇天在上 发表于 2018-7-26 16:33
不管怎样,都是打印出:不是正确的式子。

你可以测试一下,scanf以后abc的值是什么

lichuncheng 发表于 2018-7-26 16:52:50

看看看看下

lichuncheng 发表于 2018-7-26 16:53:26

皇天在上 发表于 2018-7-26 16:33
不管怎样,都是打印出:不是正确的式子。

{:5_90:}{:5_102:}{:5_103:}{:5_104:}

claws0n 发表于 2018-7-26 17:07:01

double,所以全部改用 %lf
scanf(%lf %c %lf, &a, &c, &b); 之间最好有空格,因为有些人会输入数字之后空格。

if (c == '+') 不是 if ('c' == '+')
* 与 / 的情形一样
/ 内部, if (b == 0)

无符号整形 发表于 2018-7-26 17:32:07

貌似scanf无法智能识别啊,建议用%s输入然后再分析(遍历找运算符然后strtok,再atof即可)

皇天在上 发表于 2018-7-26 19:03:55

...........结果我发现,scanf中的应该是lf不是if。最大的问题在这啊= =

皇天在上 发表于 2018-7-26 19:05:37

还有下面的除法中,应该是b == 0

皇天在上 发表于 2018-7-26 19:06:27

这打赏能不能喂给自己呀= =

皇天在上 发表于 2018-7-26 19:07:46

weizhongyang 发表于 2018-7-26 16:02
同学,
if条件判断不对,字符比较应该用c=='+'; c=='-'; c=='*'; c=='/'
还有输入的格式不对,应该用scan ...

为什么if判断里不用空格隔开呢?
页: [1]
查看完整版本: 帮我看看错哪啦