[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;elsecout << "除数不能是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;elsecout << "除数不能是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;elsecout << "错误:除数不能为零。" << 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://xiahunao.cn/news/3248345.html

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

相关文章

git镜像链接

镜像链接https://registry.npmmirror.com/binary.html?pathgit-for-windows/ CNPM Binaries Mirror 1.git init 2.克隆 IDEA集成git git分支

springboot助农电商系统-计算机毕业设计源码 08655

基于移动端的助农电商系统的设计与实现 XXX专业XX级XX班&#xff1a;XXX 指导教师&#xff1a;XXX 摘要 近年来&#xff0c;电子商务的快速发展引起了行业和学术界的高度关注。基于移动端的助农电商系统旨在为用户提供一个简单、高效、便捷的农产品购物体验&#xff0c;它不…

SpringCloud教程 | 第九篇: 使用API Gateway

1、参考资料 SpringCloud基础篇-10-服务网关-Gateway_springcloud gateway-CSDN博客 2、先学习路由&#xff0c;参考了5.1 2.1、建了一个cloudGatewayDemo&#xff0c;这是用来配置网关的工程&#xff0c;配置如下&#xff1a; http://localhost:18080/aaa/name 该接口代码如…

关于思维和智能体模型的思考(3)

在前面的讨论中我们已经提出&#xff0c;基于Agent 的AI 应用软件是由一组Agent 和环境信息构成的。其中环境信息非常重要&#xff0c;它们是大模型完成目标的重要依据。他决定了大模型思维的脉络。本文我们讨论环境信息。 环境信息的主要内容 每一次对话而言&#xff0c;大语…

LLaMA-Factory

文章目录 一、关于 LLaMA-Factory项目特色性能指标 二、如何使用1、安装 LLaMA Factory2、数据准备3、快速开始4、LLaMA Board 可视化微调5、构建 DockerCUDA 用户&#xff1a;昇腾 NPU 用户&#xff1a;不使用 Docker Compose 构建CUDA 用户&#xff1a;昇腾 NPU 用户&#xf…

9款初学者也能上手的电脑录音软件,高质量录制不是梦

市面上的电脑录音软件多如牛毛&#xff0c;我们该如何挑选最适合自己的电脑录音软件呢&#xff1f;挑选录音软件其实是有技巧的&#xff0c;今天小编整理了2024年十款用户较为熟悉的电脑录音工具。通过软件兼容系统、产品功能特性、用户评价反馈这三种方面。轻松帮助大家解决电…

一、网络通信和tcp协议

一、网络协议 1、计算机网络 简单类说就是利用通信线路实现计算机和通信设备进行信息交互的系统&#xff1b; 2、网络分类 局域网&#xff08;LAN&#xff09;&#xff1a;一般为几十米到及时公里 域域网&#xff08;MAN&#xff09;&#xff1a;介于LAN与WAN之间 广域网&…

Gettler‘s Screep World 笔记 Ⅰ

夏促时候刚刚入坑&#xff0c;写个笔记叭~ 环境配置 参考 HoPGoldy 大佬的简书&#xff0c;先配置下开发环境 萌新去看大佬的详细教程&#xff0c;我这里比较简单&#xff0c;有前端基础的可以直接抄 VSCode 跳过 node 我配的是v18.18.2 换源 npm config set registry h…

【查看WIFI密码】:在window操作系统上查看已连接过的WIFI密码(两种方式)

前言 通常情况下&#xff0c;我们想要将已经连接过的wifi分享给好友&#xff0c;但不知道怎么查看&#xff0c;废话不多说&#xff0c;直接上干货 方式一&#xff1a;通过cmd命令 Step01&#xff1a;打开cmd WIN r 弹出运行框 输入&#xff1a;cmd&#xff0c;点击确定&…

打靶记录——靶机easy_cloudantivirus

靶机下载地址 链接&#xff1a;https://pan.baidu.com/s/1OfrqdNKbabAkMvmoM70gbQ?pwdgz0m 提取码&#xff1a;gz0m Vulnhub 的靶机都有一个特点&#xff0c;通常导入到 VMware Workstation 时都会获取不到 IP 地址&#xff0c;虽然可以进紧急模式中修改&#xff0c;但是太麻…

Android SurfaceView 组件介绍,挖洞原理详解

文章目录 组件介绍基本概念关键特性使用场景 SurfaceHolder介绍主要功能使用示例 SurfaceView 挖洞原理工作机制 使用SurfaceView展示图片示例创建一个自定义的 SurfaceView类在 Activity 中使用 ImageSurfaceView注意事项效果展示 组件介绍 在 Android 开发中&#xff0c;Sur…

【STM32 HAL库】全双工DMA双buffer的I2S使用

1、配置I2S 我们的有效数据是32位的&#xff0c;使用飞利浦格式。 2、配置DMA **这里需要注意&#xff1a;**i2s的DR寄存器是16位的&#xff0c;如果需要发送32位的数据&#xff0c;是需要写两次DR寄存器的&#xff0c;所以DMA的外设数据宽度设置16位&#xff0c;而不是32位。…

关于vue实现导出excel表,以及导出的excel后的图片超过单元格的问题

实现导出带图标片的excel的方法&#xff0c; 首先&#xff1a; import table2excel from js-table2excel // 导出表格 按钮点击后触发事件 const onBatchExport () > {const column [//数据表单{title: "ID", //表头名称titlekey: "id", //数据ty…

新手小白的pytorch学习第五弹-----pytorch的工作流

我们之前学习了 pytorch 中的基本数据 tensor 今天我们要开始学习 pytorch 的简单工作流程了 数据 -> 构建或选择一个预训练的模型 -> 使得模型适应数据并能够进行预测 -> 评估模型 -> 通过实验提升性能 -> 保存并重新加载你训练的模型 机器学习和深度学习的关…

解决mysql,Navicat for MySQL,IntelliJ IDEA之间中文乱码

使用软件版本 jdk-8u171-windows-x64 ideaIU-2021.1.3 mysql-essential-5.0.87-win32 navicat8_mysql_cs 这个问题我调试了好久&#xff0c;网上的方法基本上都试过了&#xff0c;终于是解决了。 三个地方结果都不一样。 方法一 首先大家可以尝试下面这种方法&#xff1a…

Github 2024-07-15 开源项目周报 Top15

根据Github Trendings的统计,本周(2024-07-15统计)共有15个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目5非开发语言项目4JavaScript项目3TypeScript项目2Go项目1Solidity项目1Java项目1Rust项目1免费编程学习平台:freeCodeCamp.org 创建…

数据库系统概论:数据库完整性

引言 数据库是现代信息系统的心脏&#xff0c;数据的准确性和一致性对于业务流程至关重要。数据库完整性是确保数据质量的基石&#xff0c;它涵盖了数据的正确性、相容性和一致性&#xff0c;是数据安全与业务连续性的保障。 数据库完整性是指数据的精确性、可靠性和逻辑一致…

选择项目进度系统的10大必知软件

国内外主流的10款项目进度软件对比&#xff1a;PingCode、Worktile、蓝凌EIS智慧工作平台、Teambition、Tapd、Tower、Monday.com、ClickUp、Asana、Jira。 在选择项目进度系统时&#xff0c;你是否感到困惑或不确定如何挑选最适合自己团队的工具&#xff1f;市场上的众多选项和…

Uncaught (in promise) TypeError: Object(...) is not a function at eval

踩坑: Uncaught (in promise) TypeError: Object(...) is not a function at eval_at object.eval [as fullvalidate] (eval at <anonymo-CSDN博客 又新添一个错误的出现方式&#xff0c;后台启动没问题&#xff0c;但是我的数据库是无法自行启动的&#xff0c;这就导致在查…

Redis-布隆过滤器(Bloom Filter)详解

文章目录 什么是布隆过滤器 布隆过滤器的优点&#xff1a;布隆过滤器的缺点&#xff1a;其他问题 布隆过滤器适合的场景布隆过滤器原理 数据结构增加元素查询元素删除元素 如何使用布隆过滤器 Google开源的Guava自带布隆过滤器Redis实现布隆过滤器 Redis中配置布隆过滤器Redis…