C++ - 寻找"help"

C++ - Looking For "help"

本文关键字:help 寻找 C++      更新时间:2023-10-16

好的,所以我实际上已经在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.. : ";
}

请注意,由于效率和美学原因,我修改了您的一些代码;