数学运算符未注册为输入
Math operators not registering as input?
我目前正在用C++编写我的第一个RPN计算器,我遇到了一个严重的困境。当程序遇到来自用户的数学运算符作为输入时,它似乎无法理解它在看什么,并将其视为可以转换为数字的东西;我知道这是问题的最大部分,因为我得到的运行时错误告诉我,有问题的字符串无法通过stod转换为十进制。
我曾尝试在字符串中的第一个字符(即唯一的字符string.at(0)
)上使用isdigit()
,但没有成功;它仍然返回true,并且计算机试图将字符串转换为十进制,从而导致崩溃。我将发布进行计算的函数,我用来将用户输入截断为字符串向量的方法,以及我用来检查有问题的字符串是否可以使用下面的stod转换为双精度的方法:
计算:
double calculate(string inputTemp)
{
double result;
//Truncate input into a digestible format via the truncation method
vector<string> input = truncate(inputTemp);
int inputTokens = input.size();
stack<double> stk;
double num1;
double num2;
int i = 0;
while(inputTokens > 1)
{
if(isNum(input[i]))
{
cout << input[i] << " pushed to stack" << endl;
stk.push(stod(input[i]));
i++;
}
else
{
switch(input[i].at(0))
{
case '+':
num2 = stk.top();
stk.pop();
num1 = stk.top();
stk.pop();
stk.push(num1 + num2);
inputTokens--;
i++;
break;
case '-':
num2 = stk.top();
stk.pop();
num1 = stk.top();
stk.pop();
stk.push(num1 - num2);
inputTokens--;
i++;
break;
case '*': case 'x': case 'X':
num2 = stk.top();
stk.pop();
num1 = stk.top();
stk.pop();
stk.push(num1 * num2);
inputTokens--;
i++;
break;
case '/':
num2 = stk.top();
stk.pop();
num1 = stk.top();
stk.pop();
stk.push(num1 / num2);
inputTokens--;
i++;
break;
case '^':
num2 = stk.top();
stk.pop();
num1 = stk.top();
stk.pop();
stk.push(pow(num1, num2));
inputTokens--;
i++;
break;
default:
cout << "ERROR: invalid operator entered" << endl;
i++;
break;
}
}
}
result = stk.top();
return result;
}
截断字符串:
vector<string> truncate(string input)
{
vector<string> output(input.length());
for(int i = 0, j = 0; i < input.length(); i++)
{
char c = input.at(i);
switch(c)
{
case ' ': j++; break;
default: output[j] += c; break;
}
}
while(output.back() == "")
{
output.pop_back();
}
return output;
}
CHECK IF NUMBER(写这个而不是使用isdigit
,这样用户就可以输入小数,而不能输入类似3AJ的东西)
bool isNum(string input)
{
int numDecimals = 0;
int nonNumChars = 0;
for(int i = 0; i < input.length(); i++)
{
char c = input.at(i);
if(!isdigit(c))
{
switch(c)
{
case '.': numDecimals++; break;
default: nonNumChars++; break;
}
}
}
if(numDecimals < 2 && nonNumChars == 0)
{
return true;
}
else
{
return false;
}
}
我为这篇文章的篇幅太长而道歉,只是想提前提供尽可能多的信息。我被难住了。请不要发布实际的代码来代替常规建议,也不要指出我做错了什么。如果你能帮助的话,我喜欢尽可能避免复制别人的代码。如果你照抄的话,那么乐趣和学习就少了。
问题不在于传递给stod
的字符串,而在于数组索引。仔细观察你在哪里减少(和不减少)inputTokens
。
相关文章:
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 2D数组来自文本输入,中间有空格
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 检查输入是否不是整数或数字
- 正在尝试了解输入验证循环
- 读取文件并输入到矢量中
- C++如何通过用户输入删除列表元素
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 无法将结构注册为增强几何体3D点
- 如何使用用户输入在C++中正确填充2D数组
- C++MySQL C api用户输入行
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- 用户定义函数中的指针和输入
- 如何在C++中检查2D数组中负值的输入验证
- 如何只允许用户输入正整数
- 数学运算符未注册为输入
- Glutkeyboard输入未注册没有奇数循环帮助
- c++用户输入未注册