###ファイルを読み込み、スタックを用いて()と{}のそれぞれについて対応関係が問題ないかを調べるプログラムを作りたいです
学校で先日、新しくスタックを学んだので、実際に自分で作ってみようと思いプログラムを書いてみたのですがなかなか上手くいきません。
###発生している問題・エラーメッセージ
()の数があっていても「カッコについて間違いがあります」と出てしまいます。
()と{}について調べたいのですが '(' || '{' という条件の書き方があっているのかわかりません。
popという関数で取り出しをしているはずなのにきちんと取り出せていないようです。
###該当のソースコード
C
1#include <stdio.h> 2#include <stdlib.h> 3#define true 1 4#define false (!true) 5#define STACKSIZE 20 6//typedef int bool; 7#define bool int 8 9bool push(int data); 10int pop(void); 11int peek(void); 12bool is_full(void); 13bool is_empty(void); 14void print_stack(void); 15 16int stack[STACKSIZE]; 17int top=0; 18 19int main(void) 20{ 21 22 FILE *fp; 23 char fname[] = "text.txt"; 24 char ch; 25 26 fp = fopen(fname,"r"); 27 if(fp == NULL){ 28 fprintf(stderr,"Can't open %s.\n",fname); 29 return EXIT_FAILURE; 30 }else{ 31 while((ch=fgetc(fp)) != EOF){ 32 if(ch ==( '(' || '{') ){ 33 push(10); 34 } 35 else if(ch==( ')' || '}' )){ 36 pop(); 37 } 38 } 39 40 printf("\n"); 41 fclose(fp); 42 } 43 44 if(stack[top]==10 45 printf("カッコについて間違いがあります。\n"); 46 }else { 47 printf("問題はありません。\n"); 48 } 49 return 0; 50} 51 52 53bool push(int data) 54{ 55 if(is_full()) 56 return false; 57 else 58 { 59 stack[top++] = data; 60 return true; 61 } 62} 63 64int pop(void) 65{ 66 if(is_empty()){ 67 fprintf(stderr,"Error: stack is empty."); 68 return EXIT_FAILURE; 69 } 70 else { 71 return stack[--top]; 72 } 73} 74 75bool is_full(void) 76{ 77 return top==STACKSIZE; 78} 79 80bool is_empty(void) 81{ 82 return top==0; 83} 84
###試したこと
pop関数を書き換えてみたりwhile文のなかをいじってみたりしました。
###補足情報(言語/FW/ツール等のバージョンなど)
C言語で作成中です
作成したVisualStudioは古いバージョンなのでboolを定義しなければいけませんでした。
push(10)の10は適当に当てはめただけなので特に意味はありません。
txst.txtは自分が使ったファイルなのですが、()しか書いていないファイルです。
どこを直せば正常に動くようになるのか、プログラムの書き方自体間違っているのかなど詳しく教えていただけるととても助かります。どうか回答をよろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/16 13:21
2016/09/16 15:40
2016/09/17 06:41