[C/C++入门][ifelse]19、制作一个简单计算器

简单的方法

我们将假设用户输入两个数字和一个运算符(+、-、*、/),然后根据所选的运算符执行相应的操作。

#include <iostream>
using namespace std;

int main() {
    double num1, num2;
    char op;
    cout << "输入 (+,-,*,/): ";
    cin >> num1 >> num2 >> op;

    if(op == '+') {
        cout << num1 + num2 << endl;
    } else if(op == '-') {
        cout << num1 - num2 << endl;
    } else if(op == '*') {
        cout << num1 * num2 << endl;
    } else if(op == '/') {
        if(num2 != 0)
            cout << num1 / num2 << endl;
        else
            cout << "除数不能是0." << endl;
    } else {
        cout << "输入错误!" << endl;
    }

    return 0;
}

也可以用switch

#include <iostream>
using namespace std;

int main() {
    double num1, num2;
    char op;
    cout << "输入 (+,-,*,/): ";
    cin >> num1 >> num2 >> op;

    switch(op) {
        case '+':
            cout << num1 + num2 << endl;
            break;
        case '-':
            cout << num1 - num2 << endl;
            break;
        case '*':
            cout << num1 * num2 << endl;
            break;
        case '/':
            if(num2 != 0)
                cout << num1 / num2 << endl;
            else
                cout << "除数不能是0." << endl;
            break;
        default:
            cout << "输入错误!" << endl;
    }

    return 0;
}

可能会觉得这样的输入方法有些蹩脚。

毕竟谁计算运算是先输数字,再输入符号,并且还要输一下空格一下,那么有没有好的方法,像作业本上写计算一样丝滑呢?

当然有了:

(扩展学习)计算器

扩展内容不要求初学者会,作为了解。
#include <iostream>
#include <string>
#include <sstream>
using namespace std;

int main() {
    string input;
    double num1, num2;
    char op;
    cout << "请输入计算表达式(例如:33+44):" << endl;
    getline(cin, input); // 使用getline读取整个行

    stringstream ss(input);
    ss >> num1 >> op >> num2; // 将输入的字符串流解析为数字和运算符

    if (ss.fail()) { // 如果输入格式不正确
        cout << "输入有误,请检查格式是否正确!" << endl;
        return 1;
    }

    // 执行计算
    if(op == '+') {
        cout << "结果是:" << num1 + num2 << endl;
    } else if(op == '-') {
        cout << "结果是:" << num1 - num2 << endl;
    } else if(op == '*') {
        cout << "结果是:" << num1 * num2 << endl;
    } else if(op == '/') {
        if(num2 != 0)
            cout << "结果是:" << num1 / num2 << endl;
        else
            cout << "错误:除数不能为零。" << endl;
    } else {
        cout << "错误:无效的运算符。" << endl;
    }

    return 0;
}

这样就可以直接输入,得到结果了。

这里边大家可以注意到,用到了一个stringstream 来转换输入。

在C++中,stringstream 类位于 <sstream> 头文件中,它是 iostream 库的一部分,专门用于处理字符串流。stringstream 可以看作是连接字符串和流的一个桥梁,它允许我们像处理输入/输出流一样来读写字符串。

创建 stringstream 对象

当执行 stringstream ss(input); 时,创建一个名为 ssstringstream 对象,并且用一个已存在的字符串 input 来初始化它。这意味着 ss 将会包含 input 字符串的内容,但同时它也具备流的所有特性,包括能够从中读取和向其中写入数据。

stringstream 的读写功能

由于 stringstream 是流,你可以使用流的操作符 >><< 来读取和写入数据。例如,如果你有一个整数变量 int x; 并且想要从 ss 中读取一个整数值给 x,你可以这样写:

int x;
ss >> x; // 从ss中读取一个整数给x

同样地,如果你想把一个整数写入 ss,可以这样做

int y = 42;
ss << y; // 将y的值写入ss

初始化 stringstream 的意义

stringstream 被初始化为一个字符串时,它意味着你可以开始解析这个字符串,就像处理普通的输入流一样。例如,如果你的 input 字符串是 "123 apples",你可以轻松地从中读取出数字和文字:

int number;
string word;
stringstream ss(input);
ss >> number >> word;
// 现在number应该是123,word应该是"apples"

总的来说,stringstream ss(input); 这行代码创建了一个 stringstream 对象 ss,并用字符串 input 来初始化它。这使得你可以使用流的特性来处理 input 字符串,包括读取和写入数据。这是一种非常方便的方式来解析字符串中的数据,尤其是当字符串格式较为复杂时。

然后输入的时候,用不同类型的变量来接收,就可以从开头获取字符串中对应的数据了。

还不快来试试?

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值