回答編集履歴
2
誤字修正
answer
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
|
4
4
|
解決したコードというのを見ました。
|
5
5
|
|
6
|
-
私のコードはコピペはされていました、利用されていません。
|
6
|
+
私のコードはコピペはされていましたが、利用されていません。
|
7
7
|
関数 drawMemo は呼び出されもしていません。
|
8
8
|
ユーザからの入力があるたびに毎回 readMemo と findMemo が
|
9
9
|
呼び出されていますが、検索結果は全く利用されていません。
|
@@ -112,7 +112,7 @@
|
|
112
112
|
SetGraphMode(1500, 780, 32); // ウィンドウの大きさを指定
|
113
113
|
ChangeWindowMode(TRUE); // 全画面ではなくウインドウを使用
|
114
114
|
if (DxLib_Init() == -1) return -1; // DXライブラリの初期化
|
115
|
-
SetFontSize(33); // サイズの変更
|
115
|
+
SetFontSize(33); // フォントサイズの変更
|
116
116
|
SetDrawScreen(DX_SCREEN_BACK); // 描画先を裏にする
|
117
117
|
int InputHandle = MakeKeyInput(150, FALSE, FALSE, FALSE);
|
118
118
|
SetActiveKeyInput(InputHandle); // 作成したキー入力ハンドルをアクティブにする
|
@@ -212,7 +212,7 @@
|
|
212
212
|
return 0;
|
213
213
|
}
|
214
214
|
```
|
215
|
-
**追記*
|
215
|
+
**追記**
|
216
216
|
基礎の基礎が分かっていないんですね。
|
217
217
|
|
218
218
|
長さ3 の文字列 "abc" は { 'a', 'b', 'c', '\0' } の 4バイト。
|
1
文字列の比較の説明を追加
answer
CHANGED
@@ -211,4 +211,56 @@
|
|
211
211
|
DxLib_End(); // DXライブラリの使用終了
|
212
212
|
return 0;
|
213
213
|
}
|
214
|
-
```
|
214
|
+
```
|
215
|
+
**追記*
|
216
|
+
基礎の基礎が分かっていないんですね。
|
217
|
+
|
218
|
+
長さ3 の文字列 "abc" は { 'a', 'b', 'c', '\0' } の 4バイト。
|
219
|
+
長さ1 の文字列 "a" は { 'a', '\0' } の 2バイト。
|
220
|
+
長さ0 の文字列 "" は { '\0' } の 1バイト。
|
221
|
+
"\0" は { '\0', '\0' } の 2バイト。でも strlen("\0") は 0文字。
|
222
|
+
|
223
|
+
次に、文字列の比較は == では出来ません。
|
224
|
+
if (buffer == "abc") はダメで、
|
225
|
+
if (strcmp(buffer, "abc") == 0) と書きます。
|
226
|
+
|
227
|
+
buffer が空(0文字)というのは、buffer[0] が '\0' ということ。
|
228
|
+
if (buffer[0] == '\0') で調べることができます。
|
229
|
+
if (strlen(buffer) == 0) や if (strcmp(buffer, "") == 0) でも
|
230
|
+
分かりますが、関数を呼び出すのは無駄です。
|
231
|
+
|
232
|
+
こんなことも理解していなくて、アプリを作ろうとよく思いますね。
|
233
|
+
|
234
|
+
さて、buffer が空の時、if (strstr(buffer2, buffer)) が真になりますから
|
235
|
+
その先には行きません。その前に調べないといけないでしょう。
|
236
|
+
```diff
|
237
|
+
}
|
238
|
+
}
|
239
|
+
}
|
240
|
+
- if (strstr(buffer2, buffer)) {
|
241
|
+
+ if (buffer[0] == '\0') {
|
242
|
+
+ hyouzi = 0;
|
243
|
+
+ }
|
244
|
+
+ else if (strstr(buffer2, buffer)) {
|
245
|
+
hyouzi = 1;
|
246
|
+
break;
|
247
|
+
}
|
248
|
+
```
|
249
|
+
|
250
|
+
ところで、どのような動作を期待しているのでしょうか?
|
251
|
+
次のような操作で、memo.txt に追加できることは確認できたのですが、
|
252
|
+
本当にこのような動作を期待しているのでしょうか?
|
253
|
+
|
254
|
+
空の memo.txt を用意して、プログラムを起動します。
|
255
|
+
|
256
|
+
「覚えて」エンター
|
257
|
+
「→ジュニーは戦場へ行くという映画は面白い。」エンター
|
258
|
+
「覚えて」エンター
|
259
|
+
「→明日は晴れ。」エンター
|
260
|
+
「覚えて」エンター
|
261
|
+
「→どすこいはお相撲。」エンター
|
262
|
+
「晴れ」エンター
|
263
|
+
|
264
|
+
「buffer2 = →明日は晴れ。」と表示される。
|
265
|
+
memo.txt には、入力文字列が追加されている。
|
266
|
+
「→」がないと追加されません。
|