题解 P1957 【口算练习题】
P1957题解
这道题本蒟蒻一开始也不知道怎么解决输入两个或三个变量,但突然想起了cin的使用方法:(灵感来自c++ primer plus 第188最下方)
如果你定义了一个int型,那么当cin输入表达式的值是就会检测输入的是不是数字。如果程序发现用户输入了错误内容时,程序就会锁住cin,所以你就需要重置cin来接受新的输入。这时你输入的错误数据还会在在屏幕上是在缓存区还是非缓存区?如果你再输入还是从这个数据开始读取。
废话不多说,上代码!
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main ()
{
int n;
cin>>n;//输入n
char ch;//要输入的字母
string s[n];//存放最后的表达式
for(int i=0;i<n;i++)//开始循环输入
{
string st;//用来存放数字
stringstream io;//转换数字
int a,b,ans=0;//ans是答案
if(!(cin>>a))//利用了cin的性质
{
cin.clear();
cin>>ch>>a;
}
cin>>b;
io<<a;io>>s[i];io.clear();//接下来对ch进行判断
if(ch=='a')
{
ans=a+b;
s[i]+='+';
io<<b;io>>st;io.clear();//io每次用完后要记得清空哦
s[i]+=st;
s[i]+='=';
io<<ans;io>>st;io.clear();
s[i]+=st;
}//以此类推
if(ch=='b')
{
ans=a-b;
s[i]+='-';
io<<b;io>>st;io.clear();
s[i]+=st;
s[i]+='=';
io<<ans;io>>st;io.clear();
s[i]+=st;
}
if(ch=='c')
{
ans=a*b;
s[i]+='*';
io<<b;io>>st;io.clear();
s[i]+=st;
s[i]+='=';
io<<ans;io>>st;io.clear();
s[i]+=st;
}
}
for(int i=0;i<n;i++)//循环输出结果
{
cout<<s[i]<<endl;
cout<<s[i].size();
if(i!=n-1)cout<<endl;
}
}