C++ - 寻找"help"
C++ - Looking For "help"
好的,所以我实际上已经在C++编程了一段时间了,但我目前被一些可能非常明显的东西难住了。我决定写一个基本的计算器来玩。加法,减法,乘法,除法,整个批次。正如你在下面看到的,我有一个名为 choice 的 int 变量,用于查找 1、2、3 或 4。选择后,它将调用相应的函数。但是,我决定希望能够随时键入"帮助"以表示帮助。我该怎么做?我知道我可以简单地让选择成为一根绳子,但我觉得这只是在问题上贴上创可贴(对未来的问题没有帮助)。我想,在任何时候,抓住一个"帮助"。但是,使用另一个 if() 语句来捕获"帮助"显然会给我一个错误 - 因为选择是一个整数。
请帮助我,我相信这很简单,但由于某种原因我无法弄清楚!
#include <iostream>
int firstnum;
int secondnum;
int multiplication(){
std::cout << "Multiplication chosen. Please enter first number." << std::endl;
std::cin >> firstnum;
std::cout << "Please enter second number." << endl;
std::cin >> secondnum;
std::cout << "Your answer is: " << firstnum * secondnum << "." << std::endl;
}
int division(){
std::cout << "Division chosen. Please enter first number." << std::endl;
std::cin >> firstnum;
std::cout << "Please enter second number." << std::endl;
std::cin >> secondnum;
std::cout << "Your answer is: " << firstnum / secondnum << "." << std::endl;
}
int addition(){
std::cout << "Addition chosen. Please enter first number." << std::endl;
std::cin >> firstnum;
std::cout << "Please enter second number." << std::endl;
std::cin >> secondnum;
std::cout << "Your answer is: " << firstnum + secondnum << "." << std::endl;
}
int subtraction(){
std::cout << "Subtraction chosen. Please enter first number." << std::endl;
std::cin >> firstnum;
std::cout << "Please enter second number." << std::endl;
std::cin >> secondnum;
std::cout << "Your answer is: " << firstnum - secondnum << "." << std::endl;
}
int main(){
int choice;
std::cout << "Calculator." << std::endl;
std::cout << "Multiplication: 1. Division: 2. Addition: 3. Subtraction: 4. Help: help." << std::endl;
std::cin >> choice;
if(choice == 1){
multiplication();
}
if(choice == 2){
division();
}
if(choice == 3){
addition();
}
if(choice == 4){
subtraction();
}
////if the user types "help" it will show help.
return 0;
}
我只会将选择更改为 std::string
std::string choice;
std::cin >> choice;
if (choice == "1") { .... }
if (choice == "help") { .... }
但我也会改变 if 语句结构。
与其列出if statements
,不如使用地图。这会将命令映射到函数调用。
#include <iostream>
#include <map>
#include <functional>
int one()
{
std::cout << "onen";
}
int two()
{
std::cout << "twon";
}
int main()
{
std::map<std::string, std::function<int()> > action = {{"one", one}, {"two", two}};
auto act = action.find("one");
act->second();
}
将命令模式用于这样的事情。(https://en.wikipedia.org/wiki/Command_pattern)
基本上你有一个Command
类/接口,例如:
abstract class Command
{
virtual void run() = 0;
}
然后具有从中继承的不同命令:
class HelpCommand : Command
{
virtual void run()
{
// do stuff
}
}
然后在从用户获取命令的处理程序中,您将有一个string
映射Command
。因此,当用户输入命令时(例如。'help'),它从映射中获取适当的命令,然后调用其run()
方法。
unordered_map< string, Command* > commands;
commands[ "help" ] = new HelpCommand();
// ...
// get input
commands[ input ]->run();
要按照您描述的方式进行操作,您首先需要将输入读取到字符串中,检查是否输入了"帮助",如果没有,则输入是否可以解析为整数。然后,您将解析整数并正常调用其他函数。
如果您说在该程序中使用字符串就像在问题上贴上创可贴,并且可能会导致将来的问题,为什么不制作另一个字符串变量,然后如果可行,然后将其转换为数字。这是我为此目的修改的您的编码。
例:
#include <iostream>
#include <string>
#include <sstream.h>
int firstnum;
int secondnum;
void multiplication();
void division();
void addition();
void subtraction();
void help();
int main(){
int choice=NULL;
std::string input;
std::cout << "Calculator." << std::endl;
std::cout << "1. Multiplication: 2. Division: 3. Addition: 4. Subtraction: 5. Help: help." << std::endl;
std::cout << "Input : ";
std::cin >> input;
if ((input == "help")||(input == "Help")||(input == "HELP")) { choice=5; }
else {
istringstream intinput(input);
intinput>>choice;
}
switch(choice){
case 1: multiplication(); break;
case 2: division(); break;
case 3: addition(); break;
case 4: subtraction(); break;
case 5: help(); break;
}
////if the user types "help" it will show help.
return 0;
}
// BEGIN FUNCTIONS!--------------------------------------
void multiplication(){
std::cout << "Multiplication chosen. Please enter first number : ";
std::cin >> firstnum;
std::cout << "Please enter second number : ";
std::cin >> secondnum;
std::cout << "Your answer is : " << firstnum * secondnum << "." << std::endl;
}
void division(){
std::cout << "Division chosen. Please enter first number : ";
std::cin >> firstnum;
std::cout << "Please enter second number : ";
std::cin >> secondnum;
std::cout << "Your answer is: " << firstnum / secondnum << "." << std::endl;
}
void addition(){
std::cout << "Addition chosen. Please enter first number : ";
std::cin >> firstnum;
std::cout << "Please enter second number : ";
std::cin >> secondnum;
std::cout << "Your answer is: " << firstnum + secondnum << "." << std::endl;
}
void subtraction(){
std::cout << "Subtraction chosen. Please enter first number : ";
std::cin >> firstnum;
std::cout << "Please enter second number : ";
std::cin >> secondnum;
std::cout << "Your answer is: " << firstnum - secondnum << "." << std::endl;
}
void help(){
std::cout << "A simple help menu.. : ";
}
请注意,由于效率和美学原因,我修改了您的一些代码;
- QT在错误的班级中寻找空位
- 正在寻找C++不可变的hashset/hashmap
- 寻找地理和伤害意味着超载
- 寻找一种更好的方法来表示无符号字符数组
- 我正在寻找一种优雅的方式来从元组向量创建tuple_element向量
- 寻找闰年的逻辑是如何运作的?
- C++:寻找"returning address of local variable..."的更正
- 在C++中寻找排列和组合
- 如何检查用户的输入是否有效以及我正在寻找的数字?
- 为表示一个或多个操作的C++函数的int参数寻找类型安全的替换
- 寻找解决这个动态编程问题的提示
- 寻找最小楼梯成本的动态规划问题的错误答案
- 具有多个继承共享一个资源的对象 - 寻找良好的设计模式
- Homebrew OS X OpenCV - 在另一台Mac上运行时寻找dylib
- 我只是在寻找模板,在我的书中找到了这段代码,这显示了隔离错误?
- 寻找C++中数组和cout交互的解决方案
- C++原理和练习练习-从输入值n中寻找素数
- 寻找更好的方法来编写这个程序 C++
- 如何使用OpenCV作为运动检测器(而不是寻找视频输出)
- C++ - 寻找"help"