質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

1回答

1312閲覧

スタックのプログラムについて

wonwon

総合スコア13

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2017/04/16 07:57

###前提・実現したいこと
コマンドプロンプトで入力された逆ポーランド記法の値と演算子を使い、計算をして出力するというプログラムを作る。
###発生している問題・エラーメッセージ
値が正しく出力されません。
###該当のソースコード

#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をループの終了条件にしているつもりです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

こんにちは。

sはchar型ですので、1文字しか記録できません。
試しに、12+でどうなりますか? 運が良ければ1と2を足して3が出力されるかも。しかし、でたらめな結果になる可能性も高いです。

atoi()はnull終端文字列を解釈しますが1文字だけですから、その文字の次にnullが入っていません。定義していないので何になるか分かりません。

投稿2017/04/16 08:17

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問