怕取错名 发表于 2023-1-18 12:46:59

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

求各位大佬帮忙看看,我是想写四则运算的,但是加和乘都是无效{:5_104:}
#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;
       
}



ExiaGN001 发表于 2023-1-18 17:51:25

本帖最后由 ExiaGN001 于 2023-1-31 21:21 编辑

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



#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");
                invalid=false;//                        建议加上,为了不影响下次判断
      }
      else
      {
                printf("结果为:%d\n",result);
      }
      return 0;
      
}


lz好像不看,自up一下。

铭凡 发表于 2023-1-19 10:28:25

本帖最后由 铭凡 于 2023-1-19 10:39 编辑

if(invalid=true)

这一行出现错误!

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

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



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

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

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

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

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

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

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

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

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

不行,还得多说一句,要一起学习吗,C语言看了一遍,还在跟着做题,想交个同好一起进步
页: [1]
查看完整版本: 求各位大佬帮帮刚起步的人看看,我是想写四则运算的