C++ Switch 语句中的数学运算
C++ Maths in Switch statements
所以我正在寻找一个简单的数学方程式,它打印一个菜单,然后将运算符作为char
。然后,它会提示用户输入两个数字,然后打印生成的问题,然后以以下格式回答:10 + 20 = 30
。
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
//Variables
char op_choice;
int usrnum_1;
int usrnum_2;
//Menu
cout << "Operator Menunn";
cout << "+n";
cout << "-n";
cout << "*n";
cout << "/n";
cout << "%nn";
cout << "Choice:";
cin >> op_choice;
cout << "nNumbers:";
cout << "nnEnter TWO numbers to complete an arithmitic operation with the " << op_choice << " operator: n";
cout << "eg: 1 + 2 = 3n";
cout << "nNumber 1: ";
cin >> usrnum_1;
cout << "Number 2: ";
cin >> usrnum_2;
switch (op_choice)
{
case '+':
break;
case '-':
cout << "nYou picked " << usrnum_1 << " - " << usrnum_2 << " = ";
cout << usrnum_1 - usrnum_2;
break;
case '*':
cout << "nYou picked " << usrnum_1 << " X " << usrnum_2 << " = ";
cout << usrnum_1 * usrnum_2;
break;
case '/':
cout << "nYou picked " << usrnum_1 << " / " << usrnum_2 << " = ";
cout << usrnum_1 / usrnum_2;
break;
case '%':
cout << "nYou picked " << usrnum_1 << " % " << usrnum_2 << " = ";
cout << usrnum_1 % usrnum_2;
break;
default:
cout << "nYou made an illegal choice.n";
}
cout << "nYou picked " << usrnum_1 << " " << op_choice << " " << usrnum_2 << " = ";
cout << usrnum_1 << op_choice << usrnum_2;
getchar();
return 0;
}
我实际上已经让这段代码工作了,正如你从减法和乘法等中看到的那样。但是我希望将cout放在开关块之外(我开始这样做并使用add进行测试(。有没有办法在不op_choice最初将 int 变成 int 的情况下完成这项工作?或者将 cout 语句放入开关块中?使用 if-else-if 语句会更好吗?
首先,switch
是此类代码的最佳代码结构。
问题是你的通用输出概念
cout << usrnum_1 << op_choice << usrnum_2;
不能接近您想要执行的计算:
cout << usrnum_1 + usrnum_2;
我希望当你看到这些线彼此靠近时,第一个问题是清楚的。他们只是做不同的事情:
- 第一个打印
usrnum_1
,然后是op_choice
,最后是usrnum_2
。没有魔法发生,op_choice
只是打印char
。 - 第二个执行加法
usrnum_1 + usrnum_2
(算术运算符的优先级高于按位移位运算符<<
(,然后打印加法的结果。
- 第一个打印
第二个更重要的问题是,
char op_choice = '+'
(在运行时设置(不能轻易成为C++代码中的算术运算符+
,因为它是一种编译语言。编译器将表达式a + b
转换为整数加法的机器指令。你编译的程序不知道整数加法的指令与数字43(+
的ASCII码(有关,直到你明确告诉它(最好使用switch
(。
那么如何让它工作呢?正如评论者所建议的那样,您必须将计算保留在switch
块中,并且仅将打印部分取出。
int result;
switch (op_choice)
{
case '+':
result = usrnum_1 + usrnum_2;
break;
case '-':
result = usrnum_1 - usrnum_2;
break;
case '*':
result = usrnum_1 * usrnum_2;
break;
case '/':
result = usrnum_1 / usrnum_2;
break;
case '%':
result = usrnum_1 % usrnum_2;
break;
default:
cout << "nYou made an illegal choice.n";
return 1;
}
cout << "nYou picked " << usrnum_1 << " " << op_choice << " " << usrnum_2 << " = ";
cout << result;
程序的在线演示
相关文章:
- 使用C++中的模板和运算符重载执行矩阵运算
- GCC本机矩阵运算库
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- 位阵列上的快速AND运算
- 字符串中int的加法运算
- 算术运算的结果类似于:C浮点变量中的1/3
- 如何使用OpenMP并行化此矩阵时间矢量运算
- 通过switch和static_cast访问多态对象的运行时类型
- 如何在两个 boost::multi_arrays (C++) 之间执行数学运算?
- 如何将 if else 语句重写为 switch 语句
- 将 out/in out 参数与 if/switch 的 init 语句一起使用
- Switch 语句(字符串)一直选择默认值,除非其为零
- 使用 switch,但我想用字符串而不是 int 进行选择
- 如何在 vtk Poly 数据上进行布尔运算?
- MSVC 无法根据模板参数进行数学运算,这是一个错误吗?
- 在 C++ 的 Switch Case 中创建对象后对对象调用方法
- C++ switch 语句:对案例进行分组,并针对每个案例给出特定的说明
- 任意大小的 constexpr 数组是否可以用作 switch 语句中的案例?
- 在结构中使用 switch 引用结构中的数据C++
- C++ Switch 语句中的数学运算