質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

Q&A

解決済

3回答

2931閲覧

特定の言葉を含んだ文章がメモからbuffer2に入らない。

KZK13

総合スコア43

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

0グッド

1クリップ

投稿2020/06/28 09:26

編集2020/06/30 19:15

解決できない問題があります。
buffer2に保存した文章が入りません。

あの後、覚えてという言葉の後で○○は◇◇であるという形式にすることで文章をメモに記憶させることはできました。
その次に覚えさせた文章から特定の言葉が含まれていた場合、その文章を少し改造したものを表示するというプログラムを作ろうとしています。
まず、「覚えて」と入力した後に
例えば、「ジュニーは戦場へ行くという映画は面白い。」、「明日は晴れ。」、「どすこいはお相撲。」と入力してエンターキーを押します。
するとtxtに「ジュニーは戦場へ行くという映画は面白い。」、「明日は晴れ。」、「どすこいはお相撲。」と保存されます。
その後に「どんな映画が好きですか?」と入力すると、メモから if (my_str2(buffer2, "映画")) という条件により「映画」を含んだ文章を読み込み、
「ジュニーは戦場へ行くという映画は面白い。」をbuffer2に入れて「ジュニーは戦場へ行くという映画は面白い。」と返すようにします。

しかし、実際に実行するとbuffer2の方で文章が読み込めていますが、「ジュニーは戦場へ行くという映画は面白い。」という結果は表示されませんでした。
if (my_str2(buffer2, "映画")) という条件により「映画」を含んだ文章を読み込み、表示できると思っていました。しかし、実際は「映画」という言葉をメモから読み込んで一致させただけで、「映画」という言葉を含んだ文章を表示させるための処理が書かれていませんでした。
また、どうやったら太い黒文字で書いたような処理ができるのかの書き方がわかりません。
どうか私が書けるヒントとなるサンプルのプログラムなど頂けないでしょうか。

期待する結果: 「映画」という言葉を含んだ文章である"ジュニーは戦場へ行くという映画は面白い。"が画面に出力されるというのが期待です。

以下は画像です。
「どんな映画が好きですか?」の入力後
「どんな映画が好きですか?」の入力後で実行した後の値

コードです

汚いかもしれませんが、必要最低限の部分のみでコードを編集しました。
短くしたコードです

すいません、kazuma-sさん、編集後のプログラムでもなぜかエラーが起きます。
私のビルドの仕方が悪いのかもしれません。
エラーメッセージが出てしまいます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

episteme

2020/06/28 10:50

低評価: 400行近い外出しのコードを読んでもらえることが前提の質問。
KZK13

2020/06/28 10:54

>> 400行近い外出しのコードを読んでもらえることが前提の質問。 ん?逆に読まないでどうやって解決するのですか? 超能力者ならば話は別ですが。
episteme

2020/06/28 10:58

ふつー「問題を再現できる十分小さなコード」を呈示するものですから。 回答者の負担を考慮していないから低評価。
KZK13

2020/06/28 11:00

なるほど、ならば小さくするしかないですね! 何行ほどならいいですかね?100行でしょうか?
episteme

2020/06/28 11:08 編集

"僕なら"50行。十分綺麗ならそれ以上、コ汚かったらそれ以下。 この問題、DxLibとは関係なくなってない? 機能的にはコンソール入出力で十分みたいだし。 DxLib不要の質問なら、回答者ももちっと増えると思う。
KZK13

2020/06/28 11:09

そうですか。コ汚いを超えて、たぶん汚いコードなんで面倒だったら読まなくていいです。 ただ今後は、解答ではないコメントに関しては解答に関係ないとのことで通報します。
episteme

2020/06/28 11:16 編集

あとね、間違いを見つけてほしいなら呈示コードと共に: - こんな入力/操作を行えば - こんな結果が期待されるが - 現状こうなる を正確/明確に述べるべきだ。 解決を導くために必要な情報を呈示しましょう。「問題の丸投げ」と言われないためにも。
KZK13

2020/06/28 11:17

え、、、私、書いてませんでしたか。すいません。 「覚えて」と入力した後での結果やデバッグでの状況を画像を踏まえて丁寧に説明したつもりだったのですが、まだ何か足りないようです。 >>現状こうなる ってのはこうなってほしい!ということを書くのですか?だとしたらそれも書きました。 今回は結構丁寧に書いて、かつ原因の追究もやってみたのですが。
episteme

2020/06/28 11:24

> 「ジュニーは戦場へ行くという映画は面白い。」と覚えさせます。 そのために行うべき操作/入力が明記されていない。 > 「ジュニーは戦場へ行くという映画は面白い。」と返すようにします。 「期待する結果: "ジュニーは戦場へ行くという映画は面白い。"が画面に出力される」と書こう そして実際の結果、たとえば「実際の結果:何の出力もありません」とか。
KZK13

2020/06/28 11:29 編集

わかりました!私の書き方を改善します。 その意見、参考にさせて頂きます。 epistemeさんのような方ばかりではないので、どんなに質問を改善しても問題丸投げすんな!や低評価を押す民はいなくならないと考えてはいます。
episteme

2020/06/28 11:30

> どんなに質問を改善しても丸投げや低評価民はいなくならないと考えてはいます。 答えてもらう努力をしない理由にはならない。
KZK13

2020/06/28 11:32

答えてもらう努力はしていきます。まずはepistemeさんの言われた通りに時間をかけて質問を直します。 ですが、だからといって、低評価を押すだけや問題を丸投げすんな!とか言ってくるタチの悪い人はいなくならないのだろうと思っただけです。
episteme

2020/06/28 11:34

"思っただけ"で済ませておけばいい。わざわざ書いてもいいことなかろう。
KZK13

2020/06/28 11:53 編集

確かに。まずは質問を支持に従い改善します。
KZK13

2020/06/28 11:53

質問を意見を基に改善しました。どうでしょうか。 まだ足りない部分があれば言って頂けると助かります。
episteme

2020/06/28 12:21 編集

ひとつ教えて。 ファイルから読みこんだ文字列(buffer2)を会話に対する反応として画面に出力しているのは "コードです"内の何行目あたりですか? # 緑色で "buffer2はジュニーは戦場へ行くという映画は面白い。"と描かれるので、 ファイルからの読み込みはできてるんだろう。 > 実際に実行するとbuffer2の方で文章がちゃんと読み込めていないようで の根拠は?
Zuishin

2020/06/28 12:25

低評価する人のたちが悪いと言えるような質問ではありません。低評価に値する質問です。低評価します。
KZK13

2020/06/28 12:26

>>ファイルから読みこんだ文字列(buffer2)を会話に対する反応として画面に出力しているのは "コードです"内の何行目あたりですか? 231行目あたりの DrawFormatString(100, 400, GetColor(5, 105, 0), " buffer2は%s", buffer2);です > 実際に実行するとbuffer2の方で文章がちゃんと読み込めていないようで の根拠は? デバッグした際にbuffer2に保存していないような「My name is Enokida Yuuichirou.」という文章が入っていたためです。
episteme

2020/06/28 12:54 編集

再現しません。 上記報告のとおり、僕とこでは 緑色で "buffer2はジュニーは戦場へ行くという映画は面白い。"と描かれます。 # 加えて line-176 while (fgets(buffer2, 256, outputfile)) で件の文字列が読みこまれていることを確認しました。
KZK13

2020/06/28 12:58

試しに、ジュニーは戦場へ行くという映画は面白い以外の文章を保存すると、メモに書いてある一番最後の文章が描画されると思います。 多分、メモに書かれている内容が違うため同じように再現できないのかもしれません。 私の方のメモには 映画はアイアンマン ジョニーは戦場に行った 映画は面白い と書いたため、映画は面白いと描かれます。
episteme

2020/06/28 13:07 編集

それがどうした。僕は "あなたが示した操作"を行ったところ"あなたが期待する動作"が得られた。 実際の結果:「結果は何も表示されませんでした」ではなかった。 # 再現しない限り、これ以上は付き合わない
KZK13

2020/06/28 13:20 編集

もちろん、メモに「ジュニーは戦場へ行くという映画は面白い」という文章だけなら私の方でも再現できます。 ですが、「ジュニーは戦場へ行くという映画は面白い」以外にも文章があった場合、「映画」という言葉を含んだ文章を表示されないと思うので 期待した結果にはならないと言ったのです。 私の質問の書き方が悪かったです。すいません。情報を書き加えます。
episteme

2020/06/28 14:21 編集

# 後出しジャンケンには付き合えないんだが... 低評価の理由(のひとつ)がわかったろ? これだけ誘導しないとまともな質問のできない"手間のかかる質問者"てことだ。 ファイルから読みこんだ文字列(buffer2)に"映画"が含まれるかを判断しているのは "コードです"内の何行目あたりですか? そのときの処理は妥当ですか?
KZK13

2020/06/28 14:46 編集

ええ、わかりました。お手数をおかけします。今後は気を付けらるようにします。(期待はしないでください) >>ファイルから読みこんだ文字列(buffer2)に"映画"が含まれるかを判断しているのは "コードです"内の何行目あたりですか? そのときの処理は妥当ですか? 実は何行目とかではなく、書き方がわかりません。というのも、if (my_str2(buffer2, "映画")) という条件により「映画」を含んだ文章を読み込み、表示できると思っていました。しかし、実際は「映画」という言葉をメモから読み込んで一致させただけで、「映画」という言葉を含んだ文章を表示させるための処理が書かれていませんでした。 なので処理は妥当以前の問題です。ここまで来て言える立場ではないですが、ほんとにすいません。
episteme

2020/06/28 15:16 編集

あなたの望む回答の得られない(回答不能な)質問だった、と。 では改めて低評価。 質問にではなく、あなたに低評価。
KZK13

2020/06/28 15:22

ええ、低評価と言われても仕方のない内容でした。 勝手な思い込みが原因でした。嫌なもんです。 >>質問にではなく、あなたに低評価。 そういう訳の分からないコメントも今後は通報します!今回は一回目なので通報はしません。
episteme

2020/06/28 15:27 編集

訳は分かるでしょ。遠慮なく通報するがいい。
KZK13

2020/06/28 15:28

分かります。 でも、そういう言葉は好きではないのです。 いえ、なんやかんやで毎度助けて頂いているepistemeさんを通報なんて出来ません。 epistemeさん以外で、かつ解答でないものを言う人は通報します。
episteme

2020/06/28 15:36 編集

教え方が下手だとさんざんコキおろしておいてその対応? あなたの言動に低評価。 さあ通報するがいい。
KZK13

2020/06/28 15:38

単純になんやかんやで助けて頂いているので通報はしたくないというだけです。 教え方が下手というか、難しいというか遠回しというか。 低評価を貰うのは仕方ないですね。
episteme

2020/06/28 15:45 編集

ともあれ僕はあなたの言動が不快だ。本件には回答しない。 > 教え方が下手というか、難しいというか遠回しというか。 つまり下手なんだな。了解した。
KZK13

2020/06/28 20:22 編集

わかりました。 ですが、毎回の解答とお心使い感謝しています。 どうもありがとうございます。
DreamTheater

2020/07/01 01:56

質の悪い質問者をブロックする機能がteratailにも必要かもな。。。 epistemeさんお疲れ様でした。
episteme

2020/07/01 02:44

↑ブロック回避のためアカウント乗り換える輩が続出すんじゃないかな...
guest

回答3

0

こちらがコードです。https://pastebin.com/Kjeyvx2v

kazuma-sさんから頂いたコードを利用させていただいています。

解決したコードというのを見ました。

私のコードはコピペはされていましたが、利用されていません。
関数 drawMemo は呼び出されもしていません。
ユーザからの入力があるたびに毎回 readMemo と findMemo が
呼び出されていますが、検索結果は全く利用されていません。

char *memo[10]; がグローバル変数の char memo[1000]; になっています。
なぜグローバル変数にしたんですか?
readMemo、drawMemo、findMemo の第1引数が何のために char **memo に
なっているのか全く理解していませんね。

readMemo の中で使っている strdup の意味を調べていませんね。
strdup は内部で malloc を呼び出すので、memo[i] = strdup(buf); を
2度以上実行するとメモリーリークになります。

さて、私のコードが利用されていないこと以外に、さまざまな問題点があります。

コンパイルして起動するとどうなりますか?
文字が重なって表示されます。
文字列を入力しようとすると、画面の真ん中に「全角ひらがな」と表示されます。
正気の沙汰とは思えません。

「覚えて」と入力した後、いくら文字列を入力しても覚えてくれているようには
見えません。覚えてくれたのは文字列を「→」を含めた場合だけです。

本当に最初の質問の内容は解決されたのですか?
本当に最初の質問の内容は解決されたのですか?
本当に最初の質問の内容は解決されたのですか?

コードは相変わらず、無駄な記述ばかり。

#include <iostream>
#include <fstream>
#include <random>
#include <vector>
これらは何のためにあるんですか?

char String[256];
int InputHandleA;
int modoru = 0;
const int PAD_DOWN = 0;
std::string result;
これらの変数は全く使用されていません。

int InputHandle;
char buffer[256];
char buffer2[256];
int z;//関数drawString外でも使えるように外にも定義を書いた。
これらは WinMain の中だけで使用されているので、そこに書くべきじゃないのですか?

char c = str[z][posmozi[z]];//関数drawString外でも使えるように外にも定義を書いた。

c も drawString の中だけで使用されています。
また、グローバル変数にして、こんな変な初期化は要りません。

私のコードは my_str2 を使わずに検索ができていますよね。
不思議だと思わないのですか?
strstr があるので、my_str2 は要らないのに気が付かないのですか?

drawString の中に
DrawFormatString(300, 300, (0, 0, 255), "countS[0]は%d", countS[0]);
というのがありますが、(0, 0, 255) の意味が分かってこう書いていますか?

while (ProcessMessage() == 0) のループが終了した後に、
ClearDrawScreen(); ScreenFlip(); にしていますが、これも無意味です。
ProcessMessage() が 0 を返すのは、ウィンドウの x ボタンが押されて
描画処理がすべて終了するときです。

fopen が失敗した時 printf("cannot open\n"); をやっていますが、
これも無意味です。
main ではなく WinMain で始まるプログラムは標準出力先の
端末(terminal または console) を持っていませんから、printf できません。

さらに、コメントは意味不明、間違いだらけ。

ということで、最低限のコードに書き直してみました。

C++

1#pragma warning(disable: 4996) 2#include "DxLib.h" 3 4// drawString -- 文字を一字ずつ表示する 5void drawString(int x, int y, int color, int *pos, const char *str) 6{ 7 char c = str[*pos]; // *pos は pos[0] で表示文字位置 8 if (pos[1] == 0 && c != '\0') *pos += IsDBCSLeadByte(c) ? 2 : 1; 9 if (++pos[1] == 10) pos[1] = 0; // pos[1] はフレームカウンタ 10 DrawFormatString(x, y, color, "%.*s", *pos, str); 11} 12 13int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) 14{ 15 char buffer[256]; // ユーザ入力文字列 16 char buffer2[256]; // ファイルから読み込む 1行の文字列 17 int hyouzi = 0; // ??? 18 int mozicount = 0; // ??? 19 int gimonnlock = 0; // ??? 20 int gimon = 0; // ??? 21 int memorycount = 0; // ??? 22 int memory = 0; // ??? 23 24 const char *z = ""; // z は drawString で表示する文字列 25 int pos[2] = { 0 }; // z の表示文字位置(初期値をゼロにする) 26 27 unsigned buf_color = GetColor(64, 255, 192); 28 unsigned z_color = GetColor(5, 255, 255); 29 unsigned debug_color = GetColor(255, 255, 0); 30 31 SetGraphMode(1500, 780, 32); // ウィンドウの大きさを指定 32 ChangeWindowMode(TRUE); // 全画面ではなくウインドウを使用 33 if (DxLib_Init() == -1) return -1; // DXライブラリの初期化 34 SetFontSize(33); // フォントサイズの変更 35 SetDrawScreen(DX_SCREEN_BACK); // 描画先を裏にする 36 int InputHandle = MakeKeyInput(150, FALSE, FALSE, FALSE); 37 SetActiveKeyInput(InputHandle); // 作成したキー入力ハンドルをアクティブにする 38 39 while (ProcessMessage() == 0) { 40 ClearDrawScreen(); // 画面の初期化 41 DrawKeyInputModeString(1500, 0); // 入力モードを描画 42 DrawKeyInputString(0, 0, InputHandle); // 入力途中の文字列を描画 43 44 if (CheckKeyInput(InputHandle) != 0) { 45 hyouzi = 0; 46 gimon = 0; 47 memorycount = 0; 48 ++mozicount; 49 GetKeyInputString(buffer, InputHandle); // 入力された文字列を取得 50 51 if (strstr(buffer, "覚えて")) { 52 z = "何を覚えますか?", pos[0] = pos[1] = 0; 53 ++mozicount; 54 memory = 1; 55 gimon = 0; 56 } 57 else if (memory == 0) { 58 FILE *fp = fopen("memo.txt", "r"); 59 if (fp == NULL) goto dxlib_end; 60 z = "どうしましたか?", pos[0] = pos[1] = 0; 61 while (fgets(buffer2, 256, fp)) { // ファイルから読み込む 62 if (strstr(buffer, "映画") && strstr(buffer, "好き") && strstr(buffer, "?")) { 63 if (strstr(buffer, "どんな")) { 64 ++mozicount; 65 gimonnlock = 1; 66 if (strstr(buffer2, "映画") && strstr(buffer2, "どんな")) { 67 hyouzi = 1; 68 break; 69 } 70 } 71 if (strstr(buffer, "なんで") || strstr(buffer, "なぜ")) { 72 ++mozicount; 73 gimonnlock = 1; 74 if (strstr(buffer2, "映画") && strstr(buffer2, "なぜ")) { 75 hyouzi = 1; 76 break; 77 } 78 } 79 } 80 if (strstr(buffer2, buffer)) { 81 hyouzi = 1; 82 break; 83 } 84 if (hyouzi == 0) { 85 if (strcmp(buffer2, buffer) == 0) { 86 gimon = 1; 87 } 88 } 89 } 90 fclose(fp); 91 } 92 if (memory == 1 && strstr(buffer, "→")) { 93 ++mozicount; 94 memory = 2; 95 z = "記憶しました。", pos[0] = pos[1] = 0; 96 } 97 SetActiveKeyInput(InputHandle); // 再度インプットハンドルをアクティブにする 98 SetKeyInputString("", InputHandle); // 入力文字列を初期化する 99 } 100 if (memory == 2) { 101 FILE *fp = fopen("memo.txt", "a"); 102 if (fp == NULL) goto dxlib_end; 103 fprintf(fp, "%s\n", buffer); // ファイルに書く 104 fclose(fp); 105 memory = 0; 106 memorycount = 1; 107 } 108 DrawFormatString(100, 320, debug_color, "mozicount = %d, z = %s", 109 mozicount, z); 110 DrawFormatString(100, 360, debug_color, "gimonnlock = %d, memory = %d", 111 gimonnlock, memory); 112 DrawFormatString(100, 400, debug_color, "gimon = %d, hyouzi = %d, memorycount = %d", 113 gimon, hyouzi, memorycount); 114 115 if (mozicount > 0) { 116 drawString(10, 100, z_color, pos, z); 117 } 118 if (gimon == 0 && hyouzi == 1) { 119 DrawFormatString(100, 180, buf_color, "buffer2 = %s", buffer2); 120 } 121 if (hyouzi == 0 && mozicount > 0 && memory == 0&& memorycount == 0) { 122 z = "", pos[0] = pos[1] = 0; 123 DrawFormatString(10, 110, buf_color, "申し訳ありません %s とは何ですか?", buffer); 124 } 125 126 ScreenFlip(); // 裏画面の内容を表画面に反映させる 127 } 128dxlib_end: 129 DeleteKeyInput(InputHandle); // 用済みのインプットハンドルを削除する 130 DxLib_End(); // DXライブラリの使用終了 131 return 0; 132}

追記
基礎の基礎が分かっていないんですね。

長さ3 の文字列 "abc" は { 'a', 'b', 'c', '\0' } の 4バイト。
長さ1 の文字列 "a" は { 'a', '\0' } の 2バイト。
長さ0 の文字列 "" は { '\0' } の 1バイト。
"\0" は { '\0', '\0' } の 2バイト。でも strlen("\0") は 0文字。

次に、文字列の比較は == では出来ません。
if (buffer == "abc") はダメで、
if (strcmp(buffer, "abc") == 0) と書きます。

buffer が空(0文字)というのは、buffer[0] が '\0' ということ。
if (buffer[0] == '\0') で調べることができます。
if (strlen(buffer) == 0) や if (strcmp(buffer, "") == 0) でも
分かりますが、関数を呼び出すのは無駄です。

こんなことも理解していなくて、アプリを作ろうとよく思いますね。

さて、buffer が空の時、if (strstr(buffer2, buffer)) が真になりますから
その先には行きません。その前に調べないといけないでしょう。

diff

1 } 2 } 3 } 4- if (strstr(buffer2, buffer)) { 5+ if (buffer[0] == '\0') { 6+ hyouzi = 0; 7+ } 8+ else if (strstr(buffer2, buffer)) { 9 hyouzi = 1; 10 break; 11 }

ところで、どのような動作を期待しているのでしょうか?
次のような操作で、memo.txt に追加できることは確認できたのですが、
本当にこのような動作を期待しているのでしょうか?

空の memo.txt を用意して、プログラムを起動します。

「覚えて」エンター
「→ジュニーは戦場へ行くという映画は面白い。」エンター
「覚えて」エンター
「→明日は晴れ。」エンター
「覚えて」エンター
「→どすこいはお相撲。」エンター
「晴れ」エンター

「buffer2 = →明日は晴れ。」と表示される。
memo.txt には、入力文字列が追加されている。
「→」がないと追加されません。

投稿2020/07/05 13:31

編集2020/07/05 17:48
kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KZK13

2020/07/05 14:39

すいません。kazuma-sさんの以前に頂いたコードのおかげで特定の条件の時にbuffer2にメモからの文章を入れることができました。問題は解決しました。 最低限のコード、どうもありがとうございます。 あの、入力が何もない場合、すなわちbufferが空の時を以下のように書いたのですが、なぜか何も入力しないでエンターキーを押すとhyouziが1になります。 //!!入力した文字の入るbufferが空だった場合、hyouziを0として、buffer2の中身を表示しないようにする。 if (buffer=="\0") { hyouzi = 0; } 以下は頂いたコードに上のif文を加えたものです。90行目に加えました。 https://pastebin.com/zuYuqn9B
episteme

2020/07/05 14:54

デバッガの持ち腐れ。 enterのみの入力時、bufferの中身がどうなるか観察すれば一発解決。
KZK13

2020/07/05 16:37

enterのみの入力時でデバッグしました。 bufferの中身は" "となっていました。 なので、if (buffer=="") { hyouzi = 0; }としてみましたが、解決が出来ませんでした。 なぜbufferが空の時を条件にしたのに正しく動かないのでしょうか?
episteme

2020/07/05 22:20

ほんっとに基礎からできてない。数年間なにやってきたんだ... > なぜbufferが空の時を条件にしたのに正しく動かないのでしょうか? 「bufferが空の時」に真となる式ではないから。
KZK13

2020/07/06 04:37

基礎うんぬんというより、書き方の問題だと思います。 >>「bufferが空の時」に真となる式ではないから。 if (buffer=="") という書き方が間違っていて、正しくは if (buffer[0] == '\0') だとわかりました。 書き方が正しくなかったので、正しく動かなったのだと思います。
kazuma-s

2020/07/06 04:42 編集

書き方が正しくなかっただけではなく、書く場所を間違えていたことも認識していますか?
episteme

2020/07/06 04:45

「ポインタを比較すれば内容の比較ができると思っていた」なら基礎の範疇。 様々なケースでの正しい書き方を習得するのも基礎の範疇。
KZK13

2020/07/06 04:59 編集

>>書く場所を間違えていたことも認識していますか? 認識できていません。すいません。なぜ if (buffer[0] == '\0') を以下のような場所に書くと正しく動くのか、どうか教えてください。 if (buffer[0] == '\0') { } else if (my_str2(buffer2, buffer) == 0) { } else if (my_str2(buffer2, buffer) == 1) { }
kazuma-s

2020/07/06 05:04

回答の Diff とその前の説明をちゃんと読んでますか? なぜ、my_str2 が出てくるんですか? あなたは 「90行目に加えました」と書きましたが、 私は 80行目という意味で Diff を書きました。
KZK13

2020/07/06 06:42

>>buffer が空の時、if (strstr(buffer2, buffer)) が真になりますから その先には行きません。 読み落としていました。 buffer が空の時、if (strstr(buffer2, buffer)) が真になってしまうことを避けるためにkazuma-sさんの載せて頂いた書き方になると理解しました。
guest

0

ベストアンサー

memo.txt

「ジョニーは戦場へ行った」という映画は面白い。 明日は晴れ。 どすこいはお相撲。 映画館はどこも満席。 休日はおうちで映画鑑賞。

C++

1#pragma warning(disable: 4996) 2#include "DxLib.h" 3 4int readMemo(char **memo, int n) 5{ 6 FILE *fp = fopen("memo.txt", "r"); 7 if (fp == NULL) return 0; 8 int i; 9 char buf[256]; 10 memo[0] = ""; 11 for (i = 1; i < n && fgets(buf, sizeof buf, fp); i++) 12 memo[i] = strdup(buf); 13 fclose(fp); 14 return i; 15} 16 17void drawMemo(char **memo, int n) 18{ 19 int x = 10, y = 420, color = GetColor(0, 255, 0); 20 for (int i = 1; i < n; i++) { 21 DrawFormatString(x, y, color, "%2d: %s", i, memo[i]); 22 y += 30; 23 } 24} 25 26int findMemo(char **memo, int n, char *str) 27{ 28 if (str[0] != '\0') 29 for (int i = 0; i < n; i++) 30 if (strstr(memo[i], str)) return i; 31 return 0; 32} 33 34int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) 35{ 36 SetGraphMode(1280, 720, 32); // ウィンドウの大きさを指定 37 ChangeWindowMode(TRUE); // 全画面ではなくウインドウを使用 38 if (DxLib_Init() == -1) return -1; // DXライブラリの初期化 39 SetDrawScreen(DX_SCREEN_BACK); // 描画先を裏画面にする 40 SetFontSize(24); // フォントサイズを 24に変更 41 42 char *memo[10]; 43 int n_memo = readMemo(memo, 10); 44 if (n_memo == 0) { DxLib_End(); return 1; } 45 int n_show = 0; 46 47 int kih = MakeKeyInput(256, FALSE, FALSE, FALSE); // key input handle 48 SetActiveKeyInput(kih); 49 50 char buf[256] = ""; 51 52 int input_color = GetColor(255, 255, 0); 53 int show_color = GetColor(255, 0, 255); 54 int buf_color = GetColor(0, 255, 255); 55 56 while (ProcessMessage() == 0) { 57 ClearDrawScreen(); // 画面の初期化 58 59 DrawKeyInputModeString(1200, 0); // 入力モードを描画 60 DrawString(10, 30, "入力: ", input_color); 61 DrawKeyInputString(80, 30, kih); // 入力途中の文字列を描画 62 63 if (CheckKeyInput(kih) != 0) { // 入力完了なら 64 GetKeyInputString(buf, kih); // 入力文字列を取得 65 n_show = findMemo(memo, n_memo, buf); // メモを検索 66 SetActiveKeyInput(kih); 67 SetKeyInputString("", kih); 68 } 69 DrawFormatString(10, 80, buf_color, "検索文字列: %s", buf); 70 DrawFormatString(10, 110, show_color, "検索結果: %s", memo[n_show]); 71 drawMemo(memo, n_memo); // メモを表示 72 73 ScreenFlip(); // 裏画面の内容を表画面に反映させる 74 } 75 DeleteKeyInput(kih); 76 DxLib_End(); 77 return 0; 78}

追記
memo[0] = "";or でエラーにならなかったのは、
私のコンパイラが Visual C++ 2017 のものであったからだと思われます。

memo[0] = (char *)""; に変更したのはエラーメッセージに
「error C2440: '=': 'const char [1]' から 'char *' に変換できません。」
とあったからです。キャスト (char *) により強制的に変換させました。

他にコードについての疑問点はありませんか?
完全に理解されましたか?

おまけ

C++

1#pragma warning(disable: 4996) 2#include <stdio.h> // fopen, fgets, fclose, printf, puts 3#include <string.h> // strdup, strstr, strchr, strcmp, strlen 4 5#define MEMO_FILE "memo2.txt" 6 7enum { SEARCH, MEMORY }; // 検索モード、記憶モード 8 9int getline(char *buf, int size, FILE *fp) 10{ 11 if (!fgets(buf, size, fp)) return EOF; 12 char *p = strchr(buf, '\n'); 13 if (p) *p = '\0'; 14 return strlen(buf); 15} 16 17int readMemo(char **memo, int size) 18{ 19 FILE *fp = fopen(MEMO_FILE, "r"); 20 if (fp == NULL) return 0; 21 int i; 22 char buf[256]; 23 memo[0] = (char *)""; 24 for (i = 1; i < size && getline(buf, sizeof buf, fp) >= 0; i++) 25 memo[i] = strdup(buf); 26 fclose(fp); 27 return i; 28} 29 30int saveMemo(char **memo, int n) 31{ 32 FILE *fp = fopen(MEMO_FILE, "w"); 33 if (fp == NULL) return 1; 34 for (int i = 1; i < n; i++) 35 fprintf(fp, "%s\n", memo[i]); 36 fclose(fp); 37 return 0; 38} 39 40void drawMemo(char **memo, int n) 41{ 42 for (int i = 1; i < n; i++) 43 printf("%2d: %s\n", i, memo[i]); 44} 45 46int addMemo(char **memo, int size, int n, const char *str) 47{ 48 if (n >= size) return 1; 49 memo[n++] = strdup(str); 50 return 0; 51} 52 53int findMemo(char **memo, int n, char *str) 54{ 55 for (int i = 0; i < n; i++) 56 if (strstr(memo[i], str)) return i; 57 return 0; 58} 59 60int main() 61{ 62 char *memo[100]; 63 memo[0] = (char *)""; 64 int n_memo = 1; 65 int mode = SEARCH; 66 67 puts("コマンド: 記憶、検索、表示、保存、取得、終了"); 68 69 while (1) { 70 char buf[256]; 71 printf("入力: "); 72 if (getline(buf, sizeof buf, stdin) < 0) break; 73 if (buf[0] == '\0') continue; 74 75 if (!strcmp(buf, "終了")) break; 76 else if (!strcmp(buf, "記憶")) mode = MEMORY; 77 else if (!strcmp(buf, "検索")) mode = SEARCH; 78 else if (!strcmp(buf, "表示")) drawMemo(memo, n_memo); 79 else if (!strcmp(buf, "保存")) saveMemo(memo, n_memo); 80 else if (!strcmp(buf, "取得")) n_memo = readMemo(memo, 100); 81 else if (mode == MEMORY) { 82 if (addMemo(memo, 100, n_memo, buf)) puts(" 追加できません"); 83 else n_memo++; 84 } 85 else { // mode == SEARCH 86 int n_find = findMemo(memo, n_memo, buf); 87 if (n_find > 0) printf(" 検索結果: %s\n", memo[n_find]); 88 else printf(" 「%s」は見つかりません\n", buf); 89 } 90 } 91 return 0; 92}

追記2
解決済みになってしまいましたが、どのようにして解決したのですか?

「覚えて」のあと、記憶させる文字列を複数入力し、「映画」で検索するコードが
書けたのなら、それを提示してください。

私の回答のコメント欄に、
「これから読ませていただくので疑問はその後に答えさせて頂けないでしょうか。」
と書いたことを実行してください。

おまけのコードで、「入力: 」よりも現在のモードを表示したほうがよいので
次のように変更してください。

diff

1- printf("入力: "); 2+ printf(mode == MEMORY ? "記憶: " : "検索: ");

投稿2020/06/30 18:56

編集2020/07/04 15:09
kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KZK13

2020/06/30 19:11

kazuma-sさん、解答ありがとうござます。 あのerror C2440: '=': 'const char [1]' から 'char *' に変換できません。となるのですが、 出来れば自分で解決したいのですが、お手数をおかけして申し訳ないのですがエラーのないコードを頂けないでしょうか。
kazuma-s

2020/06/30 19:16

どの行で出るんですか? なぜ、そういう重要な情報を書かないんですか? エラーメッセージの意味が分からないのですか? コードには、疑問点がいくつありますか?
KZK13

2020/06/30 19:18 編集

10行目のmemo[0] = "";の部分で error C2440: '=': 'const char [1]' から 'char *' に変換できません。 とエラーが出ます。 これから読ませていただくので疑問はその後に答えさせて頂けないでしょうか。
kazuma-s

2020/06/30 19:19

memo[0] = ""; を memo[0] = (char *)""; に変えてみたらどうなりますか?
KZK13

2020/06/30 19:24 編集

おかげさまで無事に実行できました。 あの、どのように= (char *)""; と書くことで解決できるとわかったのでしょうか。 もう一つ、大変お手数をおかけするのですが、今回の問題が解決できなかったのは bufferとbuffer2での一致するかどうかを判断する関数はあったが、一致した際にresultのような 結果を含んだ物(特定の言葉を含んだ文章)がなかったためでしょうか。 聞いてばかりですいません。 こちらは最低限のコードで短くまとめたものです。 https://pastebin.com/R9Jbq3Jf
kazuma-s

2020/06/30 19:34

どこが最低限のコードなんですか? 使っていない変数がたくさんあります。String も InputHandleA も。 ScreenFlip(); のあとに 5行も空行があるのはどういう意味があるのですか? if (p != NULL or hyouzi == 1) { はコンパイルエラーになりませんか? 無駄なコメントがたくさんあります。
KZK13

2020/06/30 20:27 編集

すいません。 >>if (p != NULL or hyouzi == 1) { はコンパイルエラーになりませんか? 正しく動いていませんが、こちらでは普通にビルドできています。 遅くなりすいません。細かな部分を消して編集しました。 https://pastebin.com/cdWJNzc9
KZK13

2020/06/30 20:38

もう一つすいません。 kazuma-sさんのコードのおかげで完全体にプログラムが近ずきました。 ですが、例えば、「覚えて」と入力の後、「あいうえおはあ行」と打ち込んだ後に その文章をmemo.txtに書き込むことはできるのですが、読み込む際にウィンドウを一度閉じないと書き込んだ文章が読み込めません。 outputfile = fopen("memo.txt", "a+"); // ファイルを書き込み用にオープン(開く) の部分で上書きでかきこんで、関数readMemoが呼び出されなくても memory == 0の時に outputfile = fopen("memo.txt", "r"); // ファイルを読み込み用にオープン(開く) if (outputfile == NULL) { // オープンに失敗した場合 printf("cannot open\n"); // エラーメッセージを出して exit(1); として読み込むように書いたのですが、なぜ書き込んだ文章が読み込めないのでしょうか。
KZK13

2020/06/30 20:47

度々すいません。 関数findMemoにおいて、一致する文字が見つからない場合は返り値を1としていますが、 返り値が1の場合「申し訳ありません%sとは何ですか?」と表示したいです。 ですが、関数においての1で合った場合のif文の書き方がわかりません。 調べてみるとif(findMemo() == 1)と書くみたいにあったのですが、この書き方は間違っているようで 他に正しい書き方はあるのでしょうか?
episteme

2020/06/30 23:13

line70~: if ( n_show != 0 ) { DrawFormatString(10, 110, show_color, "検索結果: %s", memo[n_show]); } else { DrawFormatString(10, 110, show_color, "申し訳ありません %s とは何ですか?", buf); }
KZK13

2020/07/04 14:22 編集

kazuma-sさん、解答の編集でのコードどうもありがとうございます。 環境を再度整えたらできました。ありがとうございます。
KZK13

2020/07/04 17:19

編集ありがとうございます。 こちらがコードです。https://pastebin.com/Kjeyvx2v kazuma-sさんから頂いたコードを利用させていただいています。
KZK13

2020/07/06 05:27

printf(mode == MEMORY ? "記憶: " : "検索: "); についてなのですが、printfのメジャーな書き方は printf("aの値は%d", a);などですが、 printf(mode == MEMORY ? "記憶: " : "検索: ");の書き方は初めて見ました。 なぜこのような書き方ができるのでしょうか?是非詳しく知りたいです。
kazuma-s

2020/07/06 05:56

Cの入門書の演算子の説明で ? : の意味を調べてみてください。 それとも、const char *fmt = "記憶: "; printf(fmt); の意味も分かりませんか?
KZK13

2020/07/06 06:06

>>Cの入門書の演算子の説明で ? : の意味を調べてみてください。 わかりました!ありがとうございます。 >>const char *fmt = "記憶: "; printf(fmt); の意味も分かりませんか? 多分わかります。 記憶という言葉をポインタで先頭のアドレスから入れて、それを表示するという意味だと思います。
KZK13

2020/07/06 06:10

こちらで調べました。 https://mementoo.info/archives/785 >>printf(mode == MEMORY ? "記憶: " : "検索: "); mode == MEMORYの時に記憶と表示して、mode == MEMORY でない時は検索を表示するということでしょうか?
KZK13

2020/07/06 06:40

どうもありがとうございます。
guest

0

※ 回答ではありませんし、C実装でもありません。
暇つぶしに書いてみたんで、なにかのタシになれば。

C++

1#include <iostream> 2#include <fstream> 3#include <random> 4#include <string> 5#include <vector> 6 7/* fileで指定されたテキストファイル内の文字列の中から 8 wordを含む文字列を返す。 9 複数ある場合、そのうちいずれかを乱数を用いて返す。 10 存在しない場合/ファイルオープン失敗の場合、空文字列を返す。 11*/ 12std::string find_word(const std::string& file, const std::string& word) { 13 std::string result; 14 std::ifstream stream(file); 15 if ( stream.is_open() ) { 16 std::vector<std::string> lines; 17 std::string line; 18 // wordを含む文字列の集合をlinesに求める 19 while ( std::getline(stream, line) ) { 20 if ( line.find(word) != std::string::npos ) { 21 lines.push_back(line); 22 } 23 } 24 // linesが空でなければ、そのうちいずれかをデタラメに返す 25 if ( !lines.empty() ) { 26 std::random_device gen; 27 std::uniform_int_distribution<int> dist(0, lines.size()-1); 28 result = lines.at(dist(gen)); 29 } 30 } 31 return result; 32} 33 34int main() { 35 std::string word = "映画"; 36 for ( int i = 0; i < 10; ++i ) { 37 std::string result = find_word("d.txt", word); 38 if ( !result.empty() ) { 39 std::cout << word << " -> " << result << std::endl; 40 } 41 } 42}

d.txt:

ジュニーは戦場へ行くという映画は面白い。 明日は晴れ。 どすこいはお相撲。 映画館はどこも満席。 休日はおうちで映画鑑賞。

実行結果:

映画 -> ジュニーは戦場へ行くという映画は面白い。 映画 -> 休日はおうちで映画鑑賞。 映画 -> ジュニーは戦場へ行くという映画は面白い。 映画 -> 映画館はどこも満席。 映画 -> ジュニーは戦場へ行くという映画は面白い。 映画 -> 映画館はどこも満席。 映画 -> 映画館はどこも満席。 映画 -> 映画館はどこも満席。 映画 -> ジュニーは戦場へ行くという映画は面白い。 映画 -> 休日はおうちで映画鑑賞。

[追記] もっと簡単になるな...

C++

1#include <iostream> 2#include <fstream> 3#include <random> 4#include <string> 5 6/* fileで指定されたテキストファイル内の文字列の中から 7 wordを含む文字列を返す。 8 複数ある場合、そのうちいずれかを乱数を用いて返す。 9 存在しない場合/ファイルオープン失敗の場合、空文字列を返す。 10*/ 11std::string find_word(const std::string& file, const std::string& word) { 12 std::string result; 13 std::ifstream stream(file); 14 if (stream.is_open()) { 15 std::string line; 16 int count = 0; 17 std::random_device gen; 18 while (std::getline(stream, line)) { 19 if (line.find(word) != std::string::npos) { 20 ++count; 21 if ( std::bernoulli_distribution(1.0/count)(gen) ) result = line; 22 } 23 } 24 } 25 return result; 26} 27 28int main() { 29 std::string word = "映画"; 30 for (int i = 0; i < 10; ++i) { 31 std::string result = find_word("d.txt", word); 32 if (!result.empty()) { 33 std::cout << word << " -> " << result << std::endl; 34 } 35 } 36}

投稿2020/06/29 02:38

編集2020/06/30 06:48
episteme

総合スコア16612

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KZK13

2020/06/30 07:51

epistemeさん、ありがとうございます。 あの後、 キーボード入力から「映画」と打った際に、メモから映画の含む文章を表示しようとしました。 以下のプログラムを追加しました。 // キーボード入力待ち inputmozi = getchar(); unsigned char buffer; // 数値から文字への変換 buffer = (char)inputmozi; そして、std::string word はchar型への対応ができないと知ったのですが、 入力からの文字の数値を文字への変換しなければならないため、必ずcharは使います。 なのでstd::stringはstring型しか扱えないため、bufferの中身をstring型にしないとならないと思うのですが、 bufferからstring型にした文字データをstd::string へ渡すための関数や変換方法はありますか? 以上の内容を含んだプログラムです。 https://pastebin.com/kB4DMNzg
episteme

2020/06/30 08:01 編集

検索ワードを(”映画"決め打ちではなく)キーボードから入力したいんですか? Cに寄せて実装するなら: int main() { char word[64]; scanf("%s", word); for (int i = 0; i < 10; ++i) { std::string result = find_word("d.txt", word); if (!result.empty()) { std::cout << word << " -> " << result << std::endl; } } }
KZK13

2020/06/30 08:01

そうです。キーボードから「映画」と入力した場合、メモから「映画」を含む文章を表示したいです。
episteme

2020/06/30 08:24 編集

どってことありません。上記参照。 僕のコードをそのまま使うのは勘弁してもらえないかな。 > 要は相手の対応に従わずにカテゴリーがCでありながらもC++で難しく書いたり、自分の意見が理解してもらえないだけで独自解釈など造語を使って説明を放棄するなら迷惑です。 ってあなたが言ったんだし。 同じ機能を自前で実装したほうが気が楽でしょ。
KZK13

2020/06/30 08:42 編集

ありがとうございます。 以下のプログラムで、C++とCしてはうまくいきました。 https://pastebin.com/e4kFGqEd このまま使おうとは思っていません。というか使えないでしょうし。このプログラムを利用する権利は私にはありません。 このプログラムを理解できるようにどうやってCに変換できるかを考えます。 >>同じ機能を自前で実装したほうが気が楽でしょ。 自前で作れる技量があればいいのですが。
episteme

2020/06/30 11:21

> このプログラムを利用する権利は私にはありません。 あるよ。公開したんだから。
KZK13

2020/06/30 11:28

そのまま使うことはないにしても、利用して使えてよかったです。 解読できるかわかりませんが。
KZK13

2020/06/30 15:13 編集

episitemeさんのプログラムを利用してあともう少しのところまで来ました。 ただわからないことがあります。 今までの問題がなぜ解決できなかったのかは、bufferとbuffer2での一致するかどうかを判断する関数はあったが、一致した際にresultのような 結果を含んだ物(特定の言葉を含んだ文章)がなかったためだとわかりました。 そして、頂いたコードをそのままではなく、関数の中身を理解しながら編集し、プログラムに組み込みました。 // 文字の入力の入るバッファと、メモからの文字が入るバッファ2とで一致する文字が出てきた場合 if (my_str2(buffer, buffer2) == 0) { std::string result = find_word("da.txt", buffer); } と書き直し、ファイルda.txtからbufferに入れた文字列が見つかった場合にその結果をresultに入れました。 そのresultの中身を描画関数 DrawFormatStringで見ようとしました。 普通の書き方では中身が見れないようなので、result.c_str()と引数を置いて、"resultは%s"としたのですが、resultの中身が見れませんでした。 調べてみたのですが、result.c_str()という書き方で間違ってはいないと思うのですが、正しく使いこなせません。どうかどうしたらresultの中身が見れるのか書き方を教えて頂けないでしょうか。 こちらは最低限のコードで短くまとめたものです。 https://pastebin.com/R9Jbq3Jf
KZK13

2020/06/30 16:09

>>今までの問題がなぜ解決できなかったのかは、bufferとbuffer2での一致するかどうかを判断する関数はあったが、一致した際にresultのような 結果を含んだ物(特定の言葉を含んだ文章)がなかったためだとわかりました。 今まで悩んでいた問題点は上記の内容で合っていますでしょうか。
episteme

2020/06/30 16:14

> 今まで悩んでいた問題点は上記の内容で合っていますでしょうか。 それ僕に訊くこと?
episteme

2020/06/30 16:30

> どうかどうしたらresultの中身が見れるのか書き方を教えて頂けないでしょうか。 教え方が下手だとこきおろしたあなたに親切に答える筋合いはないと思うんだけど、どうかな?
KZK13

2020/06/30 16:30

ずっと悩んでいまして、解決につながる糸口がほしいです。 なのでepistemeさんに聞きました。
episteme

2020/06/30 16:32

繰り返す。 教え方が下手だとこきおろしたあなたに親切に答える筋合いはないと思うんだけど、どうかな?
KZK13

2020/06/30 16:39

>>教え方が下手だとこきおろしたあなたに親切に答える筋合いはないと思うんだけど、どうかな? はい、教える筋合いはないと思います。ですが教えてほしいです。こんなどうしようもない私に教えて頂けないでしょうか。
episteme

2020/06/30 16:45

僕の書いたコードなんか使わず全部自分で書けば嫌いな僕に頭下げずに済む。 僕はあなたの言動が不快だと言ったはずだ。
KZK13

2020/06/30 16:48

嫌いとか好きとか関係なく、教えてほしい時には頭を下げることなんかどうということはないです。 >>僕はあなたの言動が不快だと言ったはずだ。 今後は気を付けます。
episteme

2020/06/30 16:56

僕はあなたに教えたくない。下手だの難しいだの遠回しだのと言われたくないからね。
KZK13

2020/06/30 17:06 編集

二度と言いません。教えてください。お願いします。
episteme

2020/06/30 17:16

嫌だ、アカウント変えて繰り返すに決まってる。そのアカウント何個目だ?
KZK13

2020/06/30 17:18

教えてください。お願いします。 4つくらいです。
episteme

2020/06/30 17:25

諦めなさい。僕はあなたを信用できない。 二度と言いません? 一度言えば十分です。
KZK13

2020/06/30 17:28

教えてください。お願いします。 信用しなくても構いません。教えてください。
episteme

2020/06/30 17:33 編集

信用できないから教えない。 当然のことだ。
KZK13

2020/06/30 17:35

教えてください。お願いします。
episteme

2020/06/30 17:39

僕じゃなくたって教えてくれるひとならいっぱいいるでしょ。 他をあたってください。
KZK13

2020/06/30 17:46 編集

教えてください。お願い致します。 せめて >>今までの問題がなぜ解決できなかったのかは、bufferとbuffer2での一致するかどうかを判断する関数はあったが、一致した際にresultのような 結果を含んだ物(特定の言葉を含んだ文章)がなかったためだとわかりました。 今まで悩んでいた問題点は上記の内容で合っていますでしょうか。 だけでもいいのでお願いします。
episteme

2020/06/30 17:50

それに答えたらお終いにしてくれるの?
KZK13

2020/06/30 18:43 編集

出来れば、epistemeさんの関数を使った https://pastebin.com/R9Jbq3Jfのプログラムをどうすれば問題が解決するのか知りたいです。 それでおしまいにします。もう二度とepistemeさんには返事をしません。 解答が来ても無視します。 欲を言えば、 if (my_str2(buffer, buffer2) == 0) { std::string result = find_word("da.txt", buffer); LEFTmark = 213; break; } での文字を入力した際のbufferとbuffer2での中身を確認するためのデバッグ方法を教えて頂けるとありがたいです。
KZK13

2020/07/01 07:47 編集

知らない質問ですね。ネットっていろんな人が共有できるんですよ?知らないんですか? すぐにマルチポスト呼ばわりはやめてほしいな。C++探偵epistemeさん。 はい!おしまいでいいですよ。もう二度とこないでください。(何度も言ってるのに来るとかマゾなんですね) 嫌いで結構です。私もepistemeさんが嫌いです。なんでかはわかるでしょう? 何にしてももう来なくていいです。さよなら。
KZK13

2020/07/01 08:03

結局epistemeさんのコードは見た目がきれいなだけで複雑でわっかりにくいものでしたね。 kazuma-sのコードのみで解決しました。こちらの読みや好きできれいでシンプルなコードを利用することにします。
episteme

2020/07/01 08:27

新しい先生を見つけたか。それはよかった。
KZK13

2020/07/01 08:38 編集

>>新しい先生 え?まさか今まで自分が(古い)先生だと思っていたんですか? 先生気どりだったんですか? 冗談は勘弁してください。こんな人を先生と認識した覚えはないです。 ま、そんなわけなんで、もう来ないでね。次来たらなんであれ通報しますんで。さいなら。
KZK13

2020/07/01 09:48

はい!通報!(この人、馬鹿なのかな。)
bboydaisuke

2020/07/01 11:29

どうみても「馬鹿」なのは KZK13 でしょ(笑
KZK13

2020/07/01 12:43 編集

ネットストーカーとかき〇も!さすがプロ。
episteme

2020/07/01 12:53

時系列からしてバレバレだし、隠そうともしてないからね。
KZK13

2020/07/01 13:11

ネットストーカーは認めるのか、、、(困惑) 何にしても、もう終わったんで返事はいらないです。
KZK13

2020/07/01 22:48

あの後、徹夜してコードを見直したところ、元のコードをあまり崩すことなく、epistemeさんやkazuma-sのプログラムに近いプログラムが出来ました。DXライブラリは使っていません。 やっと原因はわかりました。何がいけなかったのかに気が付くまでに長い時間を費やしましたが、自分のコードにおいての問題を解決できてほんと良かったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問