質問: data; return true; } } int pop(void) { if(is_empty()){ fprintf(stderr,"Error: stack is empty."); return EXIT_FAILURE; } else { return stack[--top]; } } bool is_full(void) { return top==STACKSIZE; } bool is_empty(void) { return top==0; } ``` ### 試したこと pop関数を書き換えてみたりwhile文のなかをいじってみたりしました。 ### 補足情報(言語/FW/ツール等のバージョンなど) C言語で作成中です 作成したVisualStudioは古いバージョンなのでboolを定義しなければいけませんでした。 push(10)の10は適当に当てはめただけなので特に意味はありません。 txst.txtは自分が使ったファイルなのですが、()しか書いていないファイルです。 どこを直せば正常に動くようになるのか、プログラムの書き方自体間違っているのかなど詳しく教えていただけるととても助かります。どうか回答をよろしくお願いいたします。
回答: 条件分の書き方が間違っています。比較は'('と'{'それぞれで行わないといけません if((ch == '(') || (ch == '{')){ (まとめて書ける言語のほうが意外と少ないです。) あとは ・"(}"というような入力でも対として判定される。 pushにchを入れてpopで対か判定すればいいと思います。 ・終了判定が間違っている ( か { で1足して ) か } で1引くので全部が対になっているということは最後が0ならOKです。 ですのでプログラムの最後でスタックが空なら、問題ないと判定できます。