teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

5

編集

2020/06/30 11:30

投稿

KZK13
KZK13

スコア43

title CHANGED
File without changes
body CHANGED
@@ -24,8 +24,7 @@
24
24
  int gimonnlock = 0;
25
25
  int gimon = 0;
26
26
 
27
- int my_str2(const char* s1, const char* s2)//ここ入力し文字列と用意された文字列引数として扱う。
27
+ int my_str2(const char* s1, const char* s2)//s1がs2を含んら1返す
28
-
29
28
  {
30
29
  //s1, s2を比較する関数を使うためだけにs2の文字列のサイズが必要なので、変数aに用意した文字列の情報s2を文字列の長さを測るための関数strlenに引数として渡す。
31
30
  const size_t a = strlen(s2);

4

編集

2020/06/30 11:30

投稿

KZK13
KZK13

スコア43

title CHANGED
File without changes
body CHANGED
@@ -8,6 +8,8 @@
8
8
  ちなみに、低評価を押すのはいいんですけど、その理由も教えてもらえるとありがたいです。今後の質問の仕方の改善のために。
9
9
 
10
10
  問題:da.txtに「映画」を含んだ文章を保存し、「映画」と入力すると「映画」という文字を含んだ文章を表示するようにしたいです。ですが、「映画」と入力しても最後の行の文章が表示されるだけで意図した文章が表示されません。
11
+
12
+ さらに短くしたプログラムです。
11
13
  ```
12
14
  #pragma warning(disable: 4996)
13
15
  #include "DxLib.h"
@@ -45,13 +47,9 @@
45
47
  }
46
48
 
47
49
  }
48
-
49
- int rireki = 0;
50
- int rireki2 = 0;
51
- int LEFTmark = 0;
52
50
  const char* str[100] = {
53
- "はい!"};//ここで文字を直接書いてるので、この文字のバイト数が各posmozi[]に入るだけ
51
+ "はい!" };//ここで文字を直接書いてるので、この文字のバイト数が各posmozi[]に入るだけ
54
- int frame[100] = {10};//次の一文字が出るまでのカウンタとして働いている、ここの数値を変えることで文字が一文字ずつ出るまでの間隔を設定できる。
52
+ int frame[100] = { 10 };//次の一文字が出るまでのカウンタとして働いている、ここの数値を変えることで文字が一文字ずつ出るまでの間隔を設定できる。
55
53
  int posmozi[100];//文字のバイト数が入る箱を表している。
56
54
  int countS[100];//次の文字が出るまでのカウントするためのもの
57
55
  int z;//関数drawString外でも使えるように外にも定義を書いた。zの数値は関係なく、文字列が入った数列がif文により同じ変数zの時にframe[z]と同じになるまで+1されていったり、+2バイトor+1バイトされていくため、
@@ -116,25 +114,13 @@
116
114
  //ループ内とは言えエンターキー一回でCheckKeyInputが呼べればいい。
117
115
  //エンターキーが押された時の部分。
118
116
  if (CheckKeyInput(InputHandle) != 0) {
119
- LEFTmark = 678;
120
117
  hyouzi = 0;
121
118
  gimon = 0;
122
119
  ++mozicount;
123
120
  // 入力された文字列を取得、その文字列を数値に変換
124
121
  GetKeyInputString(buffer, InputHandle);//ここでInputHandleに入力された文字列の数値をGetKeyInputStringにより文字コードに変換したものを上でchar型で定義したbufferに入れる。
125
-
126
- if (my_str2(buffer, "覚えて")) {
127
- // キー入力ハンドルを作る(キャンセルなし全角文字有り数値入力じゃなし)
128
- //MakeKeyInputは開発者の方が一回呼び出せば使えるように作ったのでループ内には書かない。
129
- z = 11;
130
- // 入力された文字列を取得、その文字列を数値に変換
131
- // GetKeyInputString(buffer2, InputHandle);//ここでInputHandleに入力された文字列の数値をGetKeyInputStringにより文字コードとして、文字として表示するたの数値に変換したものを上でchar型で定義したbufferに入れる。
132
- ++mozicount;
133
- memory = 1;
134
- gimon = 0;
135
- }
136
122
  //覚えてという言葉以外の場合はメモを読み込む込んでループに入るようにした。
137
- else if (memory == 0) {
123
+ if (memory == 0) {
138
124
  outputfile = fopen("da.txt", "r"); // ファイルを読み込み用にオープン(開く)
139
125
  if (outputfile == NULL) { // オープンに失敗した場合
140
126
  printf("cannot open\n"); // エラーメッセージを出して
@@ -145,89 +131,28 @@
145
131
  //と同じです。このように短縮することも可能
146
132
  //★bufferには文字入力の文字列を入れたので、ここにはメモからの文字列は入れられない。なので新しくbuffer2を作る。
147
133
  while ((p = fgets(buffer2, 256, outputfile)) != NULL)//メモに書いた文字列をbuffer2の中に入れる。
148
-
149
134
  {
150
-
151
-
152
135
  // 文字の入力の入るバッファと、メモからの文字が入るバッファ2とで一致する文字が出てきた場合
153
136
  if (my_str2(buffer, buffer2) == 0) {
154
-
155
- LEFTmark = 222;
156
137
  hyouzi = 1;
157
138
  break;
158
139
  }
159
-
160
140
  // 文字の入力の入るバッファと、メモからの文字が入るバッファ2とで一致しない文字が出てきた場合
161
141
  if (hyouzi == 0) {
162
142
  if (strcmp(buffer, buffer2) != NULL) {
163
143
  gimon = 1;
164
144
  }
165
145
  }
166
-
167
-
168
146
  }
169
-
170
147
  fclose(outputfile); // ファイルをクローズ(閉じる)
171
-
172
148
  }
173
- //できればエンターキーを押して、次の文章を記憶できるようにしたかったが、文章には必ずと言っていいほど「は」や「とは」
174
- //が入るし、定義のように覚えさせたいので「覚えて」の後に下のような条件で文章を記憶するようにさせた。
175
- if (memory == 1 && my_str2(buffer, "とは") or memory == 1 && my_str2(buffer, "は") or memory == 1 && my_str2(buffer, "が")) {
176
- // キー入力ハンドルを作る(キャンセルなし全角文字有り数値入力じゃなし)
177
- //MakeKeyInputは開発者の方が一回呼び出せば使えるように作ったのでループ内には書かない。
178
-
179
- // 入力された文字列を取得、その文字列を数値に変換
180
- // GetKeyInputString(buffer2, InputHandle);//ここでInputHandleに入力された文字列の数値をGetKeyInputStringにより文字コードとして、文字として表示するたの数値に変換したものを上でchar型で定義したbufferに入れる。
181
- ++mozicount;
182
- memory = 2;
183
-
184
- }
185
- //duration = 1;
186
149
  // 再度インプットハンドルをアクティブにする
187
150
  SetActiveKeyInput(InputHandle);
188
151
  // 入力文字列を初期化する
189
152
  SetKeyInputString("", InputHandle);
190
- //++mozicount;
191
-
192
153
  }
193
-
194
- //エンターキーが押されていないときでの処理
195
- if (memory == 2) {
196
- LEFTmark = 100;
197
- //例えば、intとして49はそのままの値だが、charとしては49は文字コードで言う1を表す。//このような変換をしたようなもの。
198
-
199
-
200
- outputfile = fopen("da.txt", "a+"); // ファイルを書き込み用にオープン(開く)
201
- if (outputfile == NULL) { // オープンに失敗した場合
202
- printf("cannot open\n"); // エラーメッセージを出して
203
- exit(1); // 異常終了
204
- }
205
-
206
- fprintf(outputfile, "%s\n", buffer); // ファイルに書く
207
-
208
- fclose(outputfile); // ファイルをクローズ(閉じる)
209
-
210
- //fclose(fp);//ファイルに書き込んだときにウィンドウが消えるようになっているので、memoryが1になった瞬間に書き込んでいるうんぬん以前に
211
- //ファイルが閉じるのでウィンドウが消えてしまう。
212
- memory = 0;
213
- // return 0;//ここで0になると終了してしまうので書き込んだ後も言葉が打ち込めるようにここを消す。
214
-
215
- }
216
- //if (CheckKeyInput(InputHandle) == 0) {
217
- // z = 6;
218
- // ++mozicount;
219
- // }
220
-
221
- // DrawFormatString(100, 150, GetColor(255, 255, 0), "ProcessMessage()は%d,modoruは%d", ProcessMessage(), modoru);
222
- DrawFormatString(0, 150, GetColor(255, 255, 0), "mozicountは%d,zは%d", mozicount, z);
223
- DrawFormatString(0, 250, GetColor(255, 255, 0), " LEFTmarkは%d", LEFTmark);
224
- DrawFormatString(100, 100, GetColor(255, 255, 0), " gimonnlockは%d,memoryは%d", gimonnlock, memory);
225
- DrawFormatString(100, 300, GetColor(255, 255, 0), "bufferは%s,buffer2は%s", buffer,buffer2);
154
+ DrawFormatString(100, 300, GetColor(255, 255, 0), "bufferは%s,buffer2は%s", buffer, buffer2);
226
155
  DrawFormatString(100, 400, GetColor(5, 105, 0), "gimonは%d,hyouziは%d", gimon, hyouzi);
227
-
228
-
229
- //新しい言葉の処理
230
-
231
156
  //文字カウントが1の時
232
157
  if (mozicount > 0) {
233
158
  drawString(z, 10, 100, GetColor(5, 255, 255));
@@ -235,23 +160,9 @@
235
160
  }
236
161
  if (p != NULL or hyouzi == 1) {
237
162
 
238
- int i = 0;
239
-
240
- while (*p == input[i]) {
241
-
242
- buffer2[i] = *p;
243
-
244
- p++;
245
-
246
- i++;
247
-
248
- }
249
-
250
163
  DrawFormatString(100, 500, GetColor(5, 105, 19), " buffer2は%s", buffer2);
164
+ }
251
165
 
252
-
253
- }
254
-
255
166
  if (hyouzi == 0 && gimon == 1) {
256
167
 
257
168
  DrawFormatString(100, 600, GetColor(5, 105, 0), "申し訳ありません%sとは何ですか?", buffer);

3

編集

2020/06/30 10:30

投稿

KZK13
KZK13

スコア43

title CHANGED
File without changes
body CHANGED
@@ -5,7 +5,7 @@
5
5
  Cで書いたこのプログラムで何がいけないのか全く分からくて積んでいます。
6
6
  デバッグを書けても正常にファイルを読み込んでいるし、文字での比較も問題なくできているので何が原因かさっぱりです。
7
7
  どうか何がいけないのか助言を頂けないでしょうか。
8
- 低評価を押すのはいいんですけど、その理由も教えてもらえるとありがたいです。
8
+ ちなみに、低評価を押すのはいいんですけど、その理由も教えてもらえるとありがたいです。今後の質問の仕方の改善のために。
9
9
 
10
10
  問題:da.txtに「映画」を含んだ文章を保存し、「映画」と入力すると「映画」という文字を含んだ文章を表示するようにしたいです。ですが、「映画」と入力しても最後の行の文章が表示されるだけで意図した文章が表示されません。
11
11
  ```

2

編集

2020/06/30 09:56

投稿

KZK13
KZK13

スコア43

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

1

編集

2020/06/30 09:55

投稿

KZK13
KZK13

スコア43

title CHANGED
File without changes
body CHANGED
@@ -1,3 +1,8 @@
1
+ 環境
2
+ visul studio 2019
3
+ DXライブラリ
4
+
5
+
1
6
  申し訳ないのですが、
2
7
  Cで書いたこのプログラムで何がいけないのか全く分からくて積んでいます。
3
8
  デバッグを書けても正常にファイルを読み込んでいるし、文字での比較も問題なくできているので何が原因かさっぱりです。