[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 字符串,包括读取和写入数据。这是一种非常方便的方式来解析字符串中的数据,尤其是当字符串格式较为复杂时。

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

还不快来试试?

相关推荐

  1. [C/C++入门][ifelse]15、判断奇偶数

    2024-07-17 15:20:01       19 阅读
  2. [C/C++入门][ifelse]18、Switch星期课表

    2024-07-17 15:20:01       21 阅读
  3. [C/C++入门][ifelse]20、闰年判断

    2024-07-17 15:20:01       21 阅读
  4. 【Unity】制作简易计时器

    2024-07-17 15:20:01       20 阅读
  5. 制作一个简单的HTML个人网站

    2024-07-17 15:20:01       52 阅读
  6. 制作一个简单的html网页

    2024-07-17 15:20:01       46 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 15:20:01       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 15:20:01       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 15:20:01       58 阅读
  4. Python语言-面向对象

    2024-07-17 15:20:01       69 阅读

热门阅读

  1. 二叉树---二叉树的最大深度

    2024-07-17 15:20:01       20 阅读
  2. AI技术在企业招聘中的应用案例分析

    2024-07-17 15:20:01       25 阅读
  3. 土土土土土土土土圭

    2024-07-17 15:20:01       22 阅读
  4. ElasticSearch学习之路

    2024-07-17 15:20:01       22 阅读
  5. android include 和 merge 区别

    2024-07-17 15:20:01       20 阅读
  6. python基础篇(12):继承

    2024-07-17 15:20:01       23 阅读
  7. Spring解决循环依赖问题的四种方法

    2024-07-17 15:20:01       19 阅读
  8. 人工智能与人类社会的共生共荣

    2024-07-17 15:20:01       19 阅读
  9. Catboost 不能做多变量回归?

    2024-07-17 15:20:01       20 阅读