2013-10-15 102 views
-1

好吧,所以我实际上已经用C++编程了很长一段时间了,但我目前难以接受的东西很可能是很显然。我决定写一个基本的计算器以获得乐趣。加法,减法,乘法,除法,整个很多。正如你在下面看到的,我有一个名为choice的int变量,用于寻找1,2,3或者4.一旦选择,它将调用相应的函数。然而,我决定我希望能随时键入“帮助”来显示帮助。我怎样才能做到这一点?我知道我可以简单地选择一个字符串,但我觉得这只是对这个问题进行绷带(对未来的问题没有帮助)。我想在任何时候抓住“帮助”。但是,使用另一个if()语句来捕获“帮助”显然会给我一个错误 - 因为选择是一个int。C++ - 寻找“帮助”

请帮助我,我相信这很简单,但由于某种原因,我无法弄清楚!

#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; 
} 
+0

咦?你什么意思? – Crju

+0

哦,不,你看我的问题吧?我希望用户能够键入“帮助”。它与绕过stackoverflow过滤器无关。 – Crju

+0

对不起,我必须+1这个如果只为可怕的双关:) – Leeor

回答

0

要做到这一点,你所描述的,你首先需要阅读你的输入到STRING公尺检查,如果“帮助”被输入,如果没有,如果输入可以解析为整数的方式。然后你会解析这个整数,并像其他函数一样调用它。

5

我只想改变选择为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 << "one\n"; 
} 
int two() 
{ 
    std::cout << "two\n"; 
} 

int main() 
{ 
    std::map<std::string, std::function<int()> >  action = {{"one", one}, {"two", two}}; 

    auto act = action.find("one"); 
    act->second(); 

} 
+0

对不起,正如我所说,似乎只是在这个问题上写了一个绷带。 – Crju

+0

我甚至会抛弃“xxx选择”部分,并存储大多数由“std :: plus”等填充的“std :: function”。然后只有一组陈述来获得这两个数字。 – chris

+3

@SydZ:为什么看起来这样? –

1

我喜欢使用这种命令模式。 (https://en.wikipedia.org/wiki/Command_pattern

基本上你有一个Command类/接口,诸如:

abstract class Command 
{ 
    virtual void run() = 0; 
} 

,然后具有从继承不同的命令:

class HelpCommand : Command 
{ 
    virtual void run() 
    { 
     // do stuff 
    } 
} 

然后,在从得到的命令处理程序用户,你将有一个stringCommand的地图。因此,当用户输入一个命令(例如“help”)时,它会从地图中获取适当的命令,然后调用它的run()方法。

unordered_map< string, Command* > commands; 
commands[ "help" ] = new HelpCommand(); 

// ... 

// get input 
commands[ input ]->run();