我正在尝试构建一个简单的单操作计算器以练习while
和for
循环之类的技术,并且我正在尝试学习和理解在控制台中拥有“菜单”的方法。
我有一个程序,它为您提供了一个map
您必须从中选择的操作列表(来自 的条目,一个我能够使用但几乎一无所知的功能)。
如果您输入无效输入(非整数或超出范围的整数),它会提示您输入有效答案。现在我希望程序获取条目 (1-4) 并使它们对应于一个操作。
你会在我的代码中看到每个操作都有自己的方法(我认为这是一种很好的做事方式,尤其是练习方法之间的工作)。我想要的是main
采取operatorSelection
,并使用它来选择跳转到的方法。然后它将计算result
并将其返回给main
.
我想我可以通过使用map
,operatorSelection
对应于 in 中的条目map
,并使用该条目的相应字符串来调用方法(其中每个方法的名称与 in 相同map
)来实现这一点。
在回答之前请注意
我是新手,我想知道解决这个问题的优化方法。我想要它简单但高效;我不知道我正在使用的一些功能,尤其是map
. 我已经简要地阅读了vector
and array
,但我不知道如何使用它们。我意识到map
我的功能似乎按字母顺序打印,我希望能够完全按照自己的喜好对条目进行排序。有没有比 with 更好的方法来解决这个问题map
?
这是我的代码(操作方法不全,我知道):
// OneOpCalc.cpp : Defines the entry pofloat for the console application.
#include "stdafx.h"
using namespace std;
int operatorSelection;
float firstNumber,secondNumber,result;
int main(float argc, char* argv[])
{
bool validInput = false;
map<string,int> Operations;
Operations.insert(pair<string, int>("Addition", 1));
Operations.insert(pair<string, int>("Division", 2));
Operations.insert(pair<string, int>("Multiplication", 3));
Operations.insert(pair<string, int>("Subtraction", 4));
cout << "Welcome to OneOpCalc. ";
while (!validInput)
{
cout << "Please select an operation by its number: ";
cin >> operatorSelection;
if (!cin || operatorSelection > 5 || operatorSelection < 1)
{
cout << "Error: Invalid entry. Try again." << endl << endl;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
else
{
validInput = true;
}
}
system("pause");
return 0;
}
float Addition (float firstNumber, float secondNumber)
{
result=firstNumber+secondNumber;
return (result);
}
float Subtraction (float firstNumber, float secondNumber)
{
result=firstNumber-secondNumber;
return (result);
}
float Multiplication (float firstNumber, float secondNumber)
{
result=firstNumber*secondNumber;
return (result);
}
float Division (float firstNumber, float secondNumber)
{
result=firstNumber/secondNumber;
return (result);
}
简单地说:
根据用户输入调用方法的好方法是什么?