题解 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;
    }
}