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

news2024/12/24 2:48:51

简单的方法

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

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

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

还不快来试试?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1933563.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python项目为什么用WSGI

小背景 Java用的时间久了&#xff0c;web项目启动的时候直接启动主程序就行&#xff0c;因为spring web项目内置了Tomcat web服务器&#xff0c;服务器的配置一般也是采用默认的配置&#xff0c;所以很少关注底层实现&#xff0c;关注点主要在应用程序功能。 初学python的时候…

DDei在线设计器-HTML渲染

Html渲染 HtmlViewer插件通过将一个外部DIV附着在图形控件上&#xff0c;从而改变原有图形的显示方式。允许使用者自己定义HTML通过HTML元素。本示例演示了通过Html来扩展渲染图形&#xff0c;从而获得更加丰富的图形展现。 通常情况下&#xff0c;我们创建的图形控件&#xff…

Wireshark抓取HTTP

HTTP请求响应 使用wireshark抓取 本地机器是192.168.33.195&#xff0c;远程机器是192.168.32.129&#xff0c;远程HTTP服务端口是9005 TCP/IP实际共分为4层&#xff0c;抓包信息中可以看到各层的数据&#xff0c;最上面的数据帧包含了所有数据。 附&#xff1a;抓取本地H…

【Harmony】SCU暑期实训鸿蒙开发学习日记Day2

目录 Git 参考文章 常用操作 ArkTS的网络编程 Http编程 发送请求 GET POST 处理响应 JSON数据解析 处理响应头 错误处理 Web组件 用生命周期钩子实现登录验证功能 思路 代码示例 解读 纯记录学习日记&#xff0c;杂乱&#xff0c;误点的师傅可以掉了&#x1…

体验智慧校园学工管理的社团类型功能

在智慧校园学工管理的框架下&#xff0c;社团类型的精细化管理成为了激发学生兴趣、促进社团多样性与规范性的关键。这一功能的核心在于构建一个清晰的社团分类体系&#xff0c;确保每一种社团都能在其所属领域内蓬勃发展&#xff0c;同时&#xff0c;也便于校园管理者进行有效…

C#与C++交互开发系列(一):引言:为什么需要C#与C++交互开发

C#与C交互开发系列&#xff08;一&#xff09;&#xff1a;引言&#xff1a;为什么需要C#与C交互开发 欢迎来到C#与C交互开发系列博客的第一篇。在这个系列中&#xff0c;我们将探讨如何在C#与C之间实现互操作性&#xff0c;并逐步深入理解其应用场景和技术实现。本文将介绍什么…

植物大战僵尸全新版本Q版少女助阵好感度系统加持安卓winmac全兼容

植物大战僵尸全新版本Q版少女助阵好感度系统加持安卓winmac全兼容 链接: https://pan.baidu.com/s/11UFm4r8FKhkGAxM8dLVA8Q?pwdqnx8 提取码: qnx8

C++ ───List的使用

目录 1.1 list的介绍 1.2 list的使用 1.2.1 list的构造 1.2.2 list iterator的使用 1.2.3 list capacity 1.2.4 list element access 1.2.5 list modifiers 1.2.6 list的迭代器失效 1.1 list的介绍 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器&…

算法——双指针(day2)

目录 202.快乐数 题目解析&#xff1a; 算法解析&#xff1a; 代码&#xff1a; 11.盛最多水的容器 题目解析&#xff1a; 算法解析&#xff1a; 代码&#xff1a; 202.快乐数 力扣链接&#xff1a;202.快乐数 题目解析&#xff1a; 本文中最重要的一句话就是重复平方和…

Elasticsearch基础(三)

目录 1.DSL查询文档 1.1.DSL查询分类 1.2.全文检索查询 1.3.精准查询 1.4.地理坐标查询 1.5.复合查询 2.搜索结果处理 2.1.排序 2.2.分页 2.3.高亮 2.4.总结 3.RestClient查询文档 3.1.快速入门 3.2.match查询 3.3.精确查询 3.4.布尔查询 3.5.排序、分页 3.6.…

C语言 | Leetcode C语言题解之第233题数字1的个数

题目&#xff1a; 题解&#xff1a; int countDigitOne(int n) {// mulk 表示 10^k// 在下面的代码中&#xff0c;可以发现 k 并没有被直接使用到&#xff08;都是使用 10^k&#xff09;// 但为了让代码看起来更加直观&#xff0c;这里保留了 klong long mulk 1;int ans 0;f…

大数据量接口响应慢-传输优化

问题 接口一次性返回大量数据&#xff0c;导致JSON数据大小过大&#xff0c;带宽大小不足&#xff0c;导致接口响应时间过长 解决方案 通过数据传输压缩来降低传输数据的大小&#xff0c;从而提高传输效率 服务器端压缩 springboot项目配置application文件&#xff0c;通过…

零基础学习Python(三)

1. 多重继承 一个子类可以继承多个父类&#xff0c;这与一些编程语言的规则不通。 如果多个父类中有同名的变量和方法&#xff0c;子类访问的顺序是按照继承时小括号里书写的顺序进行访问的。 可以用issubclass(B, A)方法判断B是否为A的子类。 2. 绑定 类中的方法通过参数s…

【代码随想录笔记】数组

目录 1、二分查找 2、移除元素 3、有序数组的平方 4、螺旋矩阵II 1、二分查找 对于二分搜索法&#xff0c;有两个边界问题是容易把握不准的 1. 是left < right还是left < right 2. 当nums[middle] > target时&#xff0c;需要更新右边界&#xff0c;那是right …

【深度学习入门篇 ⑥】PyTorch搭建卷积神经网络

【&#x1f34a;易编橙&#xff1a;一个帮助编程小伙伴少走弯路的终身成长社群&#x1f34a;】 大家好&#xff0c;我是小森( &#xfe61;ˆoˆ&#xfe61; ) &#xff01; 易编橙终身成长社群创始团队嘉宾&#xff0c;橙似锦计划领衔成员、阿里云专家博主、腾讯云内容共创官…

‍我想我大抵是疯了,我喜欢上了写单元测试

前言 大家好我是聪。相信有不少的小伙伴喜欢写代码&#xff0c;但是对于单元测试这些反而觉得多此一举&#xff0c;想着我都在接口文档测过了&#xff01;还要写什么单元测试&#xff01;写不了一点&#xff01;&#xff01; 由于本人也是一个小小程序猿&#x1f649;&#xf…

Unity | Shader基础知识(第十八集:Stencil应用-透视立方盒子)

目录 一、前言 二、场景布置 三、 shader部分 1.图片的部分 2.图片部分纯净代码 3.遮罩部分复习 4.深度写入 ZWrite 5.颜色遮罩ColorMask 6.遮罩纯净代码 四、场景中shader使用 五、作者的碎碎念 一、前言 因为这个内容稍微有点多&#xff0c;我尽力讲清楚了&#x…

VAE论文阅读

在网上看到的VAE解释&#xff0c;发现有两种版本&#xff1a; 按照原来论文中的公式纯数学推导&#xff0c;一般都是了解生成问题的人写的&#xff0c;对小白很不友好。按照实操版本的&#xff0c;非常简单易懂&#xff0c;比如苏神的。但是却忽略了论文中的公式推导&#xff…

jquery中pdf在页面的显示和导出

jquery中pdf在页面的显示和导出 01 显示pdf01 .pdf结尾在线接口显示到页面 &#xff08;pdf.js库怎么安装及使用&#xff09;&#xff1a;只显示一页02 如何用PDF.JS显示整个PDF (而不仅仅是一页)&#xff1f;03 jQuery实现在线预览PDF文件(通过a标签链接跳转)&#xff1a; 02 …

【网络安全】PostMessage:分析JS实现XSS

未经许可&#xff0c;不得转载。 文章目录 前言示例正文 前言 PostMessage是一个用于在网页间安全地发送消息的浏览器 API。它允许不同的窗口&#xff08;例如&#xff0c;来自同一域名下的不同页面或者不同域名下的跨域页面&#xff09;进行通信&#xff0c;而无需通过服务器…