私は現在、int のスタックとさまざまな関数を介して機能する必要があるクラスの RPN 計算機の構築に取り組んでいます。また、cin ステートメントを介して入力を取得し、整数またはオペランドにソートして、スタックにプッシュするか、クラスから適切な関数を開始して計算する必要があります。
そのほとんどは私が理解して取り組んでいますが、私には理解できない本当に奇妙な問題があります。
最初の数値セットと最初のオペランドは問題ありません (たとえば、1 2 3 を入力すると、スタックには内容として 3、2、1 が表示されます) が、2 番目のオペランドを適用した後、ゼロがスローされます。各回答の前に。
例:
入力: 1 2 + 2 *
期待される出力: 6
私が得るもの: 0, 2, 0, 3
これがスタックの push() 関数のエラーなのか、メインのエラーなのか、それ以外のエラーなのかはわかりません。私はそれを見つけることができませんでした。正しい方向へのポイントであっても、どんな助けも大歓迎です!
どこかで問題を引き起こしていると私が推測しているコードの部分は次のとおりです。
主な機能:
int main(){
Stack mystack;
std::string getIt; // taken as input
int pushIt; // converted to int and pushed if nessecary
do{
// get user input
std::cin >> getIt;
if(getIt == "@"){};
if(getIt == "!") mystack.negate();
if(getIt == "+") mystack.add();
if(getIt == "-") mystack.subt();
if(getIt == "/") mystack.div();
if(getIt == "%") mystack.mod();
if(getIt == "SUM") mystack.sumof();
if(getIt == "R") mystack.reverse();
if(getIt == "#") mystack.print();
if(getIt == "$") mystack.clear();
else {
pushIt = atoi(getIt.c_str()); // I have no idea if this was
//utilized correctly, feel free
mystack.push(pushIt); // to correct me here if not..
}
}
while(getIt!="@"); // breaks on @
return 0;
}
プッシュ、ポップ、およびトップ オペレーター:
void Stack::push(const int& val){
Node* newNode = new Node;
newNode->data = val;
if(!head){
head = newNode;
return;
}
newNode->next = head;
head = newNode;
}
void Stack::pop(){
if(!head)
return;
if(head->next == NULL){
delete head;
head = NULL;
return;
}
Node* deleteIt = head;
head = head->next;
delete deleteIt;
return;
}
const int& Stack::top() const throw(Oops) { //Oops returns
if(head == NULL){ // an error variable
std::cout<<"ERROR!! : No values in the stack.";
}
return head->data;
}
// I also don't know if I used the throw right here..
そして、代わりにここで実際に何か間違ったことをしている場合に備えて... これは私の操作関数の 1 つ (+) で、他の関数はすべて同様にコーディングされています。
void Stack::add(){
int num1 = top();
pop();
int num2 = top();
pop();
int sum = num2+num1;
push(sum);
return;
}
ありがとう!