回答編集履歴

2

(1+2)*(3-4) のバグ修正

2020/05/18 09:20

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -89,3 +89,67 @@
89
89
  入力にスペースを許すためには scanf("%s", s) == 1 を
90
90
 
91
91
  fgets(s, sizeof s, stdin) に変更したほうが良いでしょう。
92
+
93
+
94
+
95
+ **追記2**
96
+
97
+ (1+2)*(3-4) が NG になったので、修正します。
98
+
99
+ ```C
100
+
101
+ #include <stdio.h>
102
+
103
+ #include <string.h> // strchr
104
+
105
+
106
+
107
+ const char pa[] = "([{", ren[] = ")]}", *p;
108
+
109
+ char c, err;
110
+
111
+
112
+
113
+ void paren(void)
114
+
115
+ {
116
+
117
+ while (!err && (c = *p++) && !strchr(ren, c)) {
118
+
119
+ char *q = strchr(pa, c);
120
+
121
+ if (q) {
122
+
123
+ char d = ren[q - pa];
124
+
125
+ paren();
126
+
127
+ if (c != d) err = 1;
128
+
129
+ }
130
+
131
+ }
132
+
133
+ }
134
+
135
+
136
+
137
+ int check(const char *s) { return p = s, err = 0, paren(), err || c; }
138
+
139
+
140
+
141
+ int main(void)
142
+
143
+ {
144
+
145
+ char s[1024];
146
+
147
+ while (printf(">> "), fgets(s, sizeof s, stdin) && *s != '.')
148
+
149
+ puts(check(s) ? "NG" : "OK");
150
+
151
+ }
152
+
153
+ ```
154
+
155
+ まだバグがあるかもしれません。

1

scanf -> fgets

2020/05/18 09:20

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -81,3 +81,11 @@
81
81
  >> .
82
82
 
83
83
  ```
84
+
85
+
86
+
87
+ **追記**
88
+
89
+ 入力にスペースを許すためには scanf("%s", s) == 1 を
90
+
91
+ fgets(s, sizeof s, stdin) に変更したほうが良いでしょう。