###前提・実現したいこと
コマンドプロンプトで入力された逆ポーランド記法の値と演算子を使い、計算をして出力するというプログラムを作る。
###発生している問題・エラーメッセージ
値が正しく出力されません。
###該当のソースコード
#include<iostream> using namespace std; class myStack { public: void push(int x) { S[++top] = x; } int pop() { top--; return S[top + 1]; } private: int top = 0; int S[1000] = { 0 }; }; int main() { char s; myStack sta; while ((s = cin.get()) != istream::traits_type::eof()) { if (s == '+') { int a = sta.pop(); int b = sta.pop(); sta.push(a + b); } else if (s == '-') { int a = sta.pop(); int b = sta.pop(); sta.push(a - b); } else if (s == '*') { int a = sta.pop(); int b = sta.pop(); sta.push(a * b); } else { sta.push((atoi(&s))); } } cout << sta.pop() << endl; return 0; }
###試したこと
printfで調べたら、一回の入力で二回ループしてしまいますが、
なぜなのか分かりません。
###補足情報(言語/FW/ツール等のバージョンなど)
vs2015でコンパイルしてそのコマンドプロンプトで出力しています。
myStackのメンバ変数Sは0からではなく、1から使っています。
EOFをループの終了条件にしているつもりです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。