質問編集履歴
5
編集
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
編集
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
|
-
|
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
編集
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
編集
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
編集
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
|
デバッグを書けても正常にファイルを読み込んでいるし、文字での比較も問題なくできているので何が原因かさっぱりです。
|