鱼C论坛

 找回密码
 立即注册
查看: 248|回复: 2

求各位大佬帮帮刚起步的人看看,我是想写四则运算的

[复制链接]
发表于 2023-1-18 12:46:59 | 显示全部楼层 |阅读模式
1鱼币
求各位大佬帮忙看看,我是想写四则运算的,但是加和乘都是无效
#include <stdio.h>
#include <stdbool.h>

int main()
{
        float op1,op2;
        char ch;
        float result;
        bool invalid=false;
       
    printf("请输入公式:");
        scanf("%f %c %f",&op1,&ch,&op2);
       
        switch(ch)
       
        {
                case'-':op2=-op2;//no break
                case'+':result=op1+op2;break;
                case'*':result=op1*op2;break;
                case'/':
                            if(op2!=0)
                            {
                                     result=op1/op2;break;
                            }
                            else
                            {
                                    invalid=true;break;
                            }
        }
        if(invalid=true)
        {
                printf("该公式无效!\n");
        }
        else
        {
                printf("结果为:%d\n",result);
        }
        return 0;
       
}



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2023-1-18 17:51:25 | 显示全部楼层
本帖最后由 ExiaGN001 于 2023-1-31 21:21 编辑

你再试试.
解释一下:=和==在Cpp/C中是两个运算符,
[左值=同型常量/变量]是将右值赋给左值,
[左表达式==右表达式]是判断两者是否相等,是1否0
混淆这两种运算符会导致极严重的问题。



  1. #include <stdio.h>
  2. #include <stdbool.h>

  3. int main()
  4. {
  5.         float op1,op2;
  6.         char ch;
  7.         float result;
  8.         bool invalid=false;
  9.       
  10.     printf("请输入公式:");
  11.         scanf("%f %c %f",&op1,&ch,&op2);
  12.       
  13.         switch(ch)
  14.       
  15.         {
  16.                 case'-':op2=-op2;//no break
  17.                 case'+':result=op1+op2;break;
  18.                 case'*':result=op1*op2;break;
  19.                 case'/':
  20.                             if(op2!=0)
  21.                             {
  22.                                      result=op1/op2;break;
  23.                             }
  24.                             else
  25.                             {
  26.                                     invalid=true;break;
  27.                             }
  28.         }
  29.         if(invalid==true)                                //有改
  30.         {
  31.                 printf("该公式无效!\n");
  32.                 invalid=false;//                        建议加上,为了不影响下次判断
  33.         }
  34.         else
  35.         {
  36.                 printf("结果为:%d\n",result);
  37.         }
  38.         return 0;
  39.       
  40. }

复制代码

lz好像不看,自up一下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2023-1-19 10:28:25 | 显示全部楼层
本帖最后由 铭凡 于 2023-1-19 10:39 编辑

if(invalid=true)

这一行出现错误!

两个等于号“==”才是等于,单独一个是赋值符号

所以不管你输入什么,都会提示该公式无效,而不单单是加法和除法,不信看下图

20230119102453.png

误把等于号写成赋值号这件事新手比较容易犯,除了小心一点之外,小甲鱼老师还提供了一个更好的方法

比如你要写:if(invalid=true)

你就把常数写前面
写成:if(true=invalid)

这样就算你写错了,编译器也会报错:无法对常数赋值,然后你就不得不乖乖地回去找这一行代码,就会发现原来等于号打错了

当然,如果类似“if(i == j)”就没办法啦,所以还是要小心一点的

希望对你有帮助,祝你学好编程!

我又发现了一个错误,你前边“result”是浮点型,然后输出的时候确是整型,我还是拿1 + 1(- * /)做的试验,发现结果都是0

你输出的时候要改成printf("%f", result);

改完了之后你再试试吧,应该就可以了

不行,还得多说一句,要一起学习吗,C语言看了一遍,还在跟着做题,想交个同好一起进步
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1

GMT+8, 2023-2-9 11:14

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表