質問編集履歴

5

編集

2020/06/30 11:30

投稿

KZK13
KZK13

スコア43

test CHANGED
File without changes
test CHANGED
@@ -50,9 +50,7 @@
50
50
 
51
51
 
52
52
 
53
- int my_str2(const char* s1, const char* s2)//ここ入力し文字列と用意された文字列引数として扱う。
53
+ int my_str2(const char* s1, const char* s2)//s1がs2を含んら1返す
54
-
55
-
56
54
 
57
55
  {
58
56
 

4

編集

2020/06/30 11:30

投稿

KZK13
KZK13

スコア43

test CHANGED
File without changes
test CHANGED
@@ -18,6 +18,10 @@
18
18
 
19
19
  問題:da.txtに「映画」を含んだ文章を保存し、「映画」と入力すると「映画」という文字を含んだ文章を表示するようにしたいです。ですが、「映画」と入力しても最後の行の文章が表示されるだけで意図した文章が表示されません。
20
20
 
21
+
22
+
23
+ さらに短くしたプログラムです。
24
+
21
25
  ```
22
26
 
23
27
  #pragma warning(disable: 4996)
@@ -92,19 +96,11 @@
92
96
 
93
97
  }
94
98
 
95
-
96
-
97
- int rireki = 0;
98
-
99
- int rireki2 = 0;
100
-
101
- int LEFTmark = 0;
102
-
103
99
  const char* str[100] = {
104
100
 
105
- "はい!"};//ここで文字を直接書いてるので、この文字のバイト数が各posmozi[]に入るだけ
101
+ "はい!" };//ここで文字を直接書いてるので、この文字のバイト数が各posmozi[]に入るだけ
106
-
102
+
107
- int frame[100] = {10};//次の一文字が出るまでのカウンタとして働いている、ここの数値を変えることで文字が一文字ずつ出るまでの間隔を設定できる。
103
+ int frame[100] = { 10 };//次の一文字が出るまでのカウンタとして働いている、ここの数値を変えることで文字が一文字ずつ出るまでの間隔を設定できる。
108
104
 
109
105
  int posmozi[100];//文字のバイト数が入る箱を表している。
110
106
 
@@ -234,8 +230,6 @@
234
230
 
235
231
  if (CheckKeyInput(InputHandle) != 0) {
236
232
 
237
- LEFTmark = 678;
238
-
239
233
  hyouzi = 0;
240
234
 
241
235
  gimon = 0;
@@ -246,128 +240,60 @@
246
240
 
247
241
  GetKeyInputString(buffer, InputHandle);//ここでInputHandleに入力された文字列の数値をGetKeyInputStringにより文字コードに変換したものを上でchar型で定義したbufferに入れる。
248
242
 
249
-
243
+ //覚えてという言葉以外の場合はメモを読み込む込んでループに入るようにした。
244
+
250
-
245
+ if (memory == 0) {
246
+
247
+ outputfile = fopen("da.txt", "r"); // ファイルを読み込み用にオープン(開く)
248
+
249
+ if (outputfile == NULL) { // オープンに失敗した場合
250
+
251
+ printf("cannot open\n"); // エラーメッセージを出して
252
+
253
+ exit(1); // 異常終了
254
+
255
+ }
256
+
257
+ //fgetsがNULLになるまで繰り返す
258
+
259
+ //fgets(str,256,lf)!=NULL
260
+
261
+ //と同じです。このように短縮することも可能
262
+
263
+ //★bufferには文字入力の文字列を入れたので、ここにはメモからの文字列は入れられない。なので新しくbuffer2を作る。
264
+
265
+ while ((p = fgets(buffer2, 256, outputfile)) != NULL)//メモに書いた文字列をbuffer2の中に入れる。
266
+
267
+ {
268
+
269
+ // 文字の入力の入るバッファと、メモからの文字が入るバッファ2とで一致する文字が出てきた場合
270
+
251
- if (my_str2(buffer, "覚えて")) {
271
+ if (my_str2(buffer, buffer2) == 0) {
252
-
253
- // キー入力ハンドルを作る(キャンセルなし全角文字有り数値入力じゃなし)
272
+
254
-
255
- //MakeKeyInputは開発者の方が一回呼び出せば使えるように作ったのでループ内には書かない。
256
-
257
- z = 11;
258
-
259
- // 入力された文字列を取得、その文字列を数値に変換
260
-
261
- // GetKeyInputString(buffer2, InputHandle);//ここでInputHandleに入力された文字列の数値をGetKeyInputStringにより文字コードとして、文字として表示するたの数値に変換したものを上でchar型で定義したbufferに入れる。
262
-
263
- ++mozicount;
264
-
265
- memory = 1;
273
+ hyouzi = 1;
274
+
266
-
275
+ break;
276
+
277
+ }
278
+
279
+ // 文字の入力の入るバッファと、メモからの文字が入るバッファ2とで一致しない文字が出てきた場合
280
+
281
+ if (hyouzi == 0) {
282
+
283
+ if (strcmp(buffer, buffer2) != NULL) {
284
+
267
- gimon = 0;
285
+ gimon = 1;
286
+
287
+ }
288
+
289
+ }
290
+
291
+ }
292
+
293
+ fclose(outputfile); // ファイルをクローズ(閉じる)
268
294
 
269
295
  }
270
296
 
271
- //覚えてという言葉以外の場合はメモを読み込む込んでループに入るようにした。
272
-
273
- else if (memory == 0) {
274
-
275
- outputfile = fopen("da.txt", "r"); // ファイルを読み込み用にオープン(開く)
276
-
277
- if (outputfile == NULL) { // オープンに失敗した場合
278
-
279
- printf("cannot open\n"); // エラーメッセージを出して
280
-
281
- exit(1); // 異常終了
282
-
283
- }
284
-
285
- //fgetsがNULLになるまで繰り返す
286
-
287
- //fgets(str,256,lf)!=NULL
288
-
289
- //と同じです。このように短縮することも可能
290
-
291
- //★bufferには文字入力の文字列を入れたので、ここにはメモからの文字列は入れられない。なので新しくbuffer2を作る。
292
-
293
- while ((p = fgets(buffer2, 256, outputfile)) != NULL)//メモに書いた文字列をbuffer2の中に入れる。
294
-
295
-
296
-
297
- {
298
-
299
-
300
-
301
-
302
-
303
- // 文字の入力の入るバッファと、メモからの文字が入るバッファ2とで一致する文字が出てきた場合
304
-
305
- if (my_str2(buffer, buffer2) == 0) {
306
-
307
-
308
-
309
- LEFTmark = 222;
310
-
311
- hyouzi = 1;
312
-
313
- break;
314
-
315
- }
316
-
317
-
318
-
319
- // 文字の入力の入るバッファと、メモからの文字が入るバッファ2とで一致しない文字が出てきた場合
320
-
321
- if (hyouzi == 0) {
322
-
323
- if (strcmp(buffer, buffer2) != NULL) {
324
-
325
- gimon = 1;
326
-
327
- }
328
-
329
- }
330
-
331
-
332
-
333
-
334
-
335
- }
336
-
337
-
338
-
339
- fclose(outputfile); // ファイルをクローズ(閉じる)
340
-
341
-
342
-
343
- }
344
-
345
- //できればエンターキーを押して、次の文章を記憶できるようにしたかったが、文章には必ずと言っていいほど「は」や「とは」
346
-
347
- //が入るし、定義のように覚えさせたいので「覚えて」の後に下のような条件で文章を記憶するようにさせた。
348
-
349
- if (memory == 1 && my_str2(buffer, "とは") or memory == 1 && my_str2(buffer, "は") or memory == 1 && my_str2(buffer, "が")) {
350
-
351
- // キー入力ハンドルを作る(キャンセルなし全角文字有り数値入力じゃなし)
352
-
353
- //MakeKeyInputは開発者の方が一回呼び出せば使えるように作ったのでループ内には書かない。
354
-
355
-
356
-
357
- // 入力された文字列を取得、その文字列を数値に変換
358
-
359
- // GetKeyInputString(buffer2, InputHandle);//ここでInputHandleに入力された文字列の数値をGetKeyInputStringにより文字コードとして、文字として表示するたの数値に変換したものを上でchar型で定義したbufferに入れる。
360
-
361
- ++mozicount;
362
-
363
- memory = 2;
364
-
365
-
366
-
367
- }
368
-
369
- //duration = 1;
370
-
371
297
  // 再度インプットハンドルをアクティブにする
372
298
 
373
299
  SetActiveKeyInput(InputHandle);
@@ -376,144 +302,40 @@
376
302
 
377
303
  SetKeyInputString("", InputHandle);
378
304
 
379
- //++mozicount;
380
-
381
-
382
-
383
305
  }
384
306
 
385
-
307
+ DrawFormatString(100, 300, GetColor(255, 255, 0), "bufferは%s,buffer2は%s", buffer, buffer2);
308
+
386
-
309
+ DrawFormatString(100, 400, GetColor(5, 105, 0), "gimonは%d,hyouziは%d", gimon, hyouzi);
310
+
387
- //ターキー押されていないときで処理
311
+ //文字カウ1
388
-
312
+
389
- if (memory == 2) {
313
+ if (mozicount > 0) {
390
-
391
- LEFTmark = 100;
314
+
392
-
393
- //例えば、intとして49はそのままの値だが、charとしては49は文字コードで言う1を表す。//このような変換をしたようなもの。
394
-
395
-
396
-
397
-
398
-
399
- outputfile = fopen("da.txt", "a+"); // ファイルを書き込み用にオープン(開く)
400
-
401
- if (outputfile == NULL) { // オープンに失敗した場合
402
-
403
- printf("cannot open\n"); // エラーメッセージを出して
404
-
405
- exit(1); // 異常終了
315
+ drawString(z, 10, 100, GetColor(5, 255, 255));
406
-
407
- }
408
-
409
-
410
-
411
- fprintf(outputfile, "%s\n", buffer); // ファイルに書く
412
-
413
-
414
-
415
- fclose(outputfile); // ファイルをクローズ(閉じる)
416
-
417
-
418
-
419
- //fclose(fp);//ファイルに書き込んだときにウィンドウが消えるようになっているので、memoryが1になった瞬間に書き込んでいるうんぬん以前に
420
-
421
- //ファイルが閉じるのでウィンドウが消えてしまう。
422
-
423
- memory = 0;
424
-
425
- // return 0;//ここで0になると終了してしまうので書き込んだ後も言葉が打ち込めるようにここを消す。
426
316
 
427
317
 
428
318
 
429
319
  }
430
320
 
431
- //if (CheckKeyInput(InputHandle) == 0) {
432
-
433
- // z = 6;
434
-
435
- // ++mozicount;
321
+ if (p != NULL or hyouzi == 1) {
436
-
437
- // }
322
+
438
-
439
-
440
-
441
- // DrawFormatString(100, 150, GetColor(255, 255, 0), "ProcessMessage()は%d,modoruは%d", ProcessMessage(), modoru);
323
+
442
-
443
- DrawFormatString(0, 150, GetColor(255, 255, 0), "mozicountは%d,zは%d", mozicount, z);
324
+
444
-
445
- DrawFormatString(0, 250, GetColor(255, 255, 0), " LEFTmarkは%d", LEFTmark);
446
-
447
- DrawFormatString(100, 100, GetColor(255, 255, 0), " gimonnlockは%d,memoryは%d", gimonnlock, memory);
448
-
449
- DrawFormatString(100, 300, GetColor(255, 255, 0), "bufferは%s,buffer2は%s", buffer,buffer2);
325
+ DrawFormatString(100, 500, GetColor(5, 105, 19), " buffer2は%s", buffer2);
450
-
451
- DrawFormatString(100, 400, GetColor(5, 105, 0), "gimonは%d,hyouziは%d", gimon, hyouzi);
452
-
453
-
454
-
455
-
456
-
457
- //新しい言葉の処理
458
-
459
-
460
-
461
- //文字カウントが1の時
462
-
463
- if (mozicount > 0) {
464
-
465
- drawString(z, 10, 100, GetColor(5, 255, 255));
466
-
467
-
468
326
 
469
327
  }
470
328
 
329
+
330
+
471
- if (p != NULL or hyouzi == 1) {
331
+ if (hyouzi == 0 && gimon == 1) {
472
-
473
-
474
-
475
- int i = 0;
332
+
476
-
477
-
478
-
479
- while (*p == input[i]) {
333
+
480
-
481
-
482
-
483
- buffer2[i] = *p;
334
+
484
-
485
-
486
-
487
- p++;
488
-
489
-
490
-
491
- i++;
492
-
493
-
494
-
495
- }
496
-
497
-
498
-
499
- DrawFormatString(100, 500, GetColor(5, 105, 19), " buffer2は%s", buffer2);
335
+ DrawFormatString(100, 600, GetColor(5, 105, 0), "申し訳ありません%sとは何ですか?", buffer);
500
-
501
-
502
-
503
-
504
336
 
505
337
  }
506
338
 
507
-
508
-
509
- if (hyouzi == 0 && gimon == 1) {
510
-
511
-
512
-
513
- DrawFormatString(100, 600, GetColor(5, 105, 0), "申し訳ありません%sとは何ですか?", buffer);
514
-
515
- }
516
-
517
339
 
518
340
 
519
341
  // 裏画面の内容を表画面に反映させる

3

編集

2020/06/30 10:30

投稿

KZK13
KZK13

スコア43

test CHANGED
File without changes
test CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  どうか何がいけないのか助言を頂けないでしょうか。
14
14
 
15
- 低評価を押すのはいいんですけど、その理由も教えてもらえるとありがたいです。
15
+ ちなみに、低評価を押すのはいいんですけど、その理由も教えてもらえるとありがたいです。今後の質問の仕方の改善のために。
16
16
 
17
17
 
18
18
 

2

編集

2020/06/30 09:56

投稿

KZK13
KZK13

スコア43

test CHANGED
File without changes
test CHANGED
@@ -6,16 +6,18 @@
6
6
 
7
7
 
8
8
 
9
-
10
-
11
- 申し訳ないのですが、
12
-
13
9
  Cで書いたこのプログラムで何がいけないのか全く分からくて積んでいます。
14
10
 
15
11
  デバッグを書けても正常にファイルを読み込んでいるし、文字での比較も問題なくできているので何が原因かさっぱりです。
16
12
 
17
13
  どうか何がいけないのか助言を頂けないでしょうか。
18
14
 
15
+ 低評価を押すのはいいんですけど、その理由も教えてもらえるとありがたいです。
16
+
17
+
18
+
19
+ 問題:da.txtに「映画」を含んだ文章を保存し、「映画」と入力すると「映画」という文字を含んだ文章を表示するようにしたいです。ですが、「映画」と入力しても最後の行の文章が表示されるだけで意図した文章が表示されません。
20
+
19
21
  ```
20
22
 
21
23
  #pragma warning(disable: 4996)

1

編集

2020/06/30 09:55

投稿

KZK13
KZK13

スコア43

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,13 @@
1
+ 環境
2
+
3
+ visul studio 2019
4
+
5
+ DXライブラリ
6
+
7
+
8
+
9
+
10
+
1
11
  申し訳ないのですが、
2
12
 
3
13
  Cで書いたこのプログラムで何がいけないのか全く分からくて積んでいます。