回答編集履歴
3
気づいた点を追加
test
CHANGED
@@ -160,7 +160,7 @@
|
|
160
160
|
|
161
161
|
```
|
162
162
|
|
163
|
-
演算子直前の空白はどうすべきか、エラーチェックなどまだまだ不完全・・・ですが、流れがシンプルで見通しがよくなったと思います。
|
163
|
+
演算子直前の空白はどうすべきか、エラーチェックなどまだまだ不完全・・・ですが、流れがシンプルで見通しがよくなったと思います。この線で私なりの完成形を作ることができました。
|
164
164
|
|
165
165
|
|
166
166
|
|
@@ -201,3 +201,7 @@
|
|
201
201
|
|
202
202
|
|
203
203
|
- STRLEG は string length を短縮したのだと思いますが、LEG だと長さではなく「脚」になって良くない(脚にも長さあるがw)。重箱の隅のようだけど、格好悪いし、名前は案外大事だということで。6文字ならSTRLENかな。
|
204
|
+
|
205
|
+
|
206
|
+
|
207
|
+
- ```#define STRLEG 16``` ですが、int 型が 32bit なら10進数で10桁まで扱えるので、16文字では少ないと言えます。fgets()で入力するなら \n と \0 の2文字分を含めて、最低でも 10 + 1 + 10 + 2 = 23 文字、さらに空白文字の分もあったほうが良いでしょうね。
|
2
説明を一文追加
test
CHANGED
@@ -30,7 +30,7 @@
|
|
30
30
|
|
31
31
|
|
32
32
|
|
33
|
-
そこで、こんなふうに組み直したらどうか(まずは、空白は無い、エラーチェックも要らないと仮定し、正常な処理の本筋だけを考えてみる)。
|
33
|
+
要は、入力した文字列から2つの数字と演算子を切り出すことです。そこで、こんなふうに組み直したらどうか(まずは、空白は無い、エラーチェックも要らないと仮定し、正常な処理の本筋だけを考えてみる)。
|
34
34
|
|
35
35
|
|
36
36
|
|
1
str2num() を conv2num() に。他、少し表現を修正。
test
CHANGED
@@ -10,11 +10,11 @@
|
|
10
10
|
|
11
11
|
|
12
12
|
|
13
|
-
p--; が必要になる理由は、``` for (p = str; *p != '\n'; p++)``` というループの中で数字やら演算子やらを切り出しているからです。ですから Chironian さんが
|
13
|
+
p--; が必要になる理由は、``` for (p = str; *p != '\n'; p++)``` というループの中で数字やら演算子やらを切り出しているからです。ですから Chironian さんがおっしゃるように、``` for (p = str; *p != '\n'; ) ``` とする手もあるでしょうが、、、
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
-
もうひとつ、Chironianさん
|
17
|
+
もうひとつ、Chironianさんご指摘の、インデントが深いことも考慮する必要があります。インデントが深いほど理解しにくく、メンテナンスしにくくなるのだから。
|
18
18
|
|
19
19
|
インデントが深くなる原因は、関数化していないことに加えて、``` for (p = str; ...)``` という大きなループの中で処理していることです。このforループの中で
|
20
20
|
|
@@ -86,7 +86,7 @@
|
|
86
86
|
|
87
87
|
|
88
88
|
|
89
|
-
char *
|
89
|
+
char *conv2num(char *ptr, int *num) // 数字に変換する
|
90
90
|
|
91
91
|
{
|
92
92
|
|
@@ -138,11 +138,11 @@
|
|
138
138
|
|
139
139
|
p = str; // 入力行の先頭から
|
140
140
|
|
141
|
-
p =
|
141
|
+
p = conv2num(p, &num1); // 数字ひとつめ
|
142
142
|
|
143
143
|
op = *p++; // 演算子
|
144
144
|
|
145
|
-
p =
|
145
|
+
p = conv2num(p, &num2); // 数字ふたつめ
|
146
146
|
|
147
147
|
|
148
148
|
|
@@ -160,7 +160,7 @@
|
|
160
160
|
|
161
161
|
```
|
162
162
|
|
163
|
-
エラーチェックなどまだまだ不完全
|
163
|
+
演算子直前の空白はどうすべきか、エラーチェックなどまだまだ不完全・・・ですが、流れがシンプルで見通しがよくなったと思います。
|
164
164
|
|
165
165
|
|
166
166
|
|
@@ -200,4 +200,4 @@
|
|
200
200
|
|
201
201
|
|
202
202
|
|
203
|
-
- STRLEG は string length を短縮したのだと思いますが、LEG だと長さではなく「脚」
|
203
|
+
- STRLEG は string length を短縮したのだと思いますが、LEG だと長さではなく「脚」になって良くない(脚にも長さあるがw)。重箱の隅のようだけど、格好悪いし、名前は案外大事だということで。6文字ならSTRLENかな。
|