简单计算器
深入对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;