数据结构基础-PTA-简单计算器

简单计算器

深入对scanf的理解

拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。
输入格式:
输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。遇等号”=”说明输入结束。
输出格式:
在一行中输出算式的运算结果,或者如果除法分母为0或有非法运算符,则输出错误信息“ERROR”。




挺简单的一道题目,但是花了挺长时间,原因就是对scanf的理解不到位,导致在操作符与操作数的分割上花了较多时间.

scanf有以下几个注意的地方

  • 首先,我们在控制台输入一串数据时;比如 1-2+3/2*5-8/10= 时,要注意不需要用一个字符型数组把他储存起来,这样后面分割会花费很多时间,最好的方法就是用一个int型和一个char型:
    scanf("%d%c",&sum,&op);
  • 为什么可以这样做呢?当时对scanf理解不到位,所以不敢这么做,其实我们输入的数据开始是到缓冲区,然后scanf到缓冲区里读数据;在读的过程中,首先是sum,1是int型的所以读入sum中,但是-不是,这个时候scanf会退出
  • C编译在碰到空格,TAB,回车或非法数据(如对“%d”输入“12A”时,A即为非法数据)时即认为该数据结束。
  • 这样由于操作符和运算符类型不同,在输入的时候我们就可以很方便的把他们分开



#include<iostream>
#include<cstring>
using namespace std;
	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值