#include <iostream>
double getUserInput()
{
std::cout << "Input a number: ";
double value;
std::cin >> value;
return value;
}
int getMathOp()
{
std::cout << "Input one of the following math operators: +, -, * or / : ";
char op;
std::cin >> op;
return op;
}
int printReuslt(double x, char op, double y)
{
if (op == '+')
std::cout << x << " + " << y << " is " << x + y << '\n';
else if (op == '-')
std::cout << x << " - " << y << " is " << x - y << '\n';
else if (op == '*')
std::cout << x << " * " << y << " is " << x * y << '\n';
else if (op == '/')
std::cout << x << " / " << y << " is " << x / y << '\n';
else
std::cout << op << " is not a valid operator. An error has occurred";
}
int main()
{
double x = getUserInput();
double y = getUserInput();
char op = getMathOp();
printReuslt(x, op, y);
return 0;
}
我正在构建一个非常简单的计算器。
我想添加另外两项功能,执行以下操作:
对于第一个功能,我通过简单地将功能“重置”到第一行来设想它 - 让用户再次输入一个数字。 我会通过一个'if'语句来实现这一点,该语句将输入值设置为不是double的值,它将执行一条消息“value is not number”。然后该函数将重置为第一行并忽略先前的输入。
对于第二部分功能,我在'printResult'中包含一个'else'语句,使输入值成为未指定为执行消息的数学运算符的东西,这有点开头。运算符不是有效的运算符。发生错误“。在此之后,程序结束。 我想要输出该消息,然后将'printResult'函数重置为第一行(忽略先前的输入),而不是在消息输出后结束程序。
我的问题是我如何做我想要的事情(将函数放在第一行,忽略先前的输入,以便用户可以输入新值)以及将此功能实现到我的最佳方式是什么码? 此外,我希望对我想要添加的预期功能进行任何改进。
由于
答案 0 :(得分:0)
使用某种形式的循环和一系列操作,如:
另外要注意确保在成功完成工作后#34;循环的下一次运行再次读取所有输入,即使它们在作业之前是正常的,否则它将在第一次成功的任务之后继续过时的输入。
即。
之类的东西double x, y;
char op;
// make sure that first iteration will read everything
bool x_OK=false, y_OK=false, op_OK=false;
while(true)
{
// only re-read parts that were broken
// or, if you want to re-read ALL not just those broken, just remove IFs
if(!x_OK) x = getX();
if(!y_OK) y = getY();
if(!op_OK) op = getOP();
// ensure that we know what's broken
x_OK = checkNumber(x);
y_OK = checkNumber(y);
op_OK= checkOp(op);
if(!x_Ok) // error message..
if(!y_Ok) // error message..
if(!op_Ok) // error message..
// ready to go?
if( x_OK&&y_OK&&op_OK )
{
printReuslt(x, op, y);
x_OK = y_OK = op_OK = false; // clear to force next iteration to read all
}
// else - nothing! loop will loop and will start again
// but now with DIFFERENT states of x/y/op/OK variables
// so next iteration of the loop will probably behave
// in a different way to previous
}
这当然是绝对天真的草图,没有处理/清除CIN错误等。很少有功能也缺失,但你应该从他们的名字中得到这个想法。此外,添加一些智能退出条件而不是while-true是一个好主意。