[c++]コンソール入力バッファの破棄

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: [c++]コンソール入力バッファの破棄

Re: [c++]コンソール入力バッファの破棄

#3

by purin52002 » 7年前

調べてみたところReadConsoleのごみはFlushConsoleInputBufferで削除できないみたいですね。
低レベル版のReadConsoleInputを使ったところ(おそらく)うまく動きました。

sleepさんありがとうございました<(__)>

Re: [c++]コンソール入力バッファの破棄

#2

by sleep » 7年前

purin52002 さんが書きました: 今回の質問なのですがGetNumberOfConsoleInputEvents、FlushConsoleInputBufferに渡すのは入力バッファのハンドルであっているでしょうか?
あっています。
purin52002 さんが書きました: 入力バッファに残ったごみを削除することができません。
(15文字入力、ReadConsole関数で10文字読み込む、次のReadConsole関数に5文字読み込まれてしまう)

調べてみたところ、
残っているごみの数を調べるにはGetNumberOfConsoleInputEvents、
ごみを消すにはFlushConsoleInputBuffer
という関数を使うらしいのですが、これらがうまく動いてくれません。

入力バッファを引数に渡しても「ゴミは残ってない」、「だから消さない」と言ってくるのです。

・・・(省略)

というかそもそも違う関数を使うのでしょうか?
理解して ReadConsole 関数を使用していますか?
ReadConsole、GetNumberOfConsoleInputEvents、FlushConsoleInputBuffer の3つの関数は正しく動いています。
msdn の説明をよく読みましょう。

[c++]コンソール入力バッファの破棄

#1

by purin52002 » 7年前

こんにちは

最近Win32_APIをつかってコンソールゲームを作っています。(文字のみで画面が構成される)

今回はダブルバッファを用いようと思ったため標準入出力は使わず、
代わりに
  • コンソール出力バッファ1
  • コンソール出力バッファ2
  • コンソール入力バッファ
を作ろうと思いました。

ダブルバッファを使った文字出力、入力バッファに文字入力はできたのですが、
入力バッファに残ったごみを削除することができません。
(15文字入力、ReadConsole関数で10文字読み込む、次のReadConsole関数に5文字読み込まれてしまう)

調べてみたところ、
残っているごみの数を調べるにはGetNumberOfConsoleInputEvents、
ごみを消すにはFlushConsoleInputBuffer
という関数を使うらしいのですが、これらがうまく動いてくれません。

入力バッファを引数に渡しても「ゴミは残ってない」、「だから消さない」と言ってくるのです。


今回の質問なのですがGetNumberOfConsoleInputEvents、FlushConsoleInputBufferに渡すのは入力バッファのハンドルであっているでしょうか?

というかそもそも違う関数を使うのでしょうか?

よろしくお願いします<(__)>


以下簡略コード

コード:

auto input_handle =CreateFile
		(
			TEXT("CONIN$"), GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
			NULL, OPEN_EXISTING, 0, NULL
		);

char str[10];
DWORD temp;

//15文字入力すると先頭10文字がstrに格納される
ReadConsole(input_handle, str, 10, &temp, NULL);

//残っているごみの数をtempに格納->0が入る        
GetNumberOfConsoleInputEvents(input_handle, &temp);

//残り5文字をバッファから消したい
FlushConsoleInputBuffer(input_handle);

//でも消えずに残り5文字がstrに格納されてしまう
ReadConsole(input_handle, str, 10, &temp, NULL);   

ページトップ