問題タブ [getch]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
1674 参照

c++ - 単純な getch() と strcmp の問題

関数を使用してユーザーから入力を取得し、入力が「パスワード」と「等しい」かどうかを確認するこの単純な問題があります。ただし、strcmp は目的の値を返すことはありません。原因は、getch() を使用して各文字を個別に取得し、それらを文字配列に追加するループのどこかにあります。これは、printf に文字配列を表示させることでわかりました。パスワードを入力すると、関数はそれをパスワード " として表示します。入力した単語の直後に二重引用符と空白が配列に含まれている理由がわかりません。何か考えはありますか?コードは次のとおりです。ありがとう。

0 投票する
4 に答える
371 参照

c - getc と組み合わせてポインターを使用するにはどうすればよいですか?

ファイルから数値を取得して返す関数 getNum() があります。getNum() に戻ると、ポインターが失われ、ファイルの最初から再び開始されます。getc の場所を取得して、その場所に戻るにはどうすればよいのでしょうか。マニュアルやフォーラムでこれを行う方法を見つけることができませんでした。ありがとうございました。

0 投票する
3 に答える
1061 参照

c - Strcat は単純な getch のようなパスワード入力でセグメンテーション違反をスローします

私は Linux を使用していますが、int現在のキーの種類のASCII を返すカスタム関数がありますgetch()。それに慣れようとして、パスワードを保存する方法が問題になったとき、私のコードは次のとおりです。

残念ながら、GCC から警告が表示されます。

パスにchar配列の代わりにポインターを使用しようとしましたが、2番目に文字を入力するとセグメンテーション違反が発生します。この関数は単独で動作しますが、ループ内では機能しません。少なくとも、Windows システムでの getch() とは異なります。

私の例で何が間違っていることがわかりますか? 私はこれを学ぶことを楽しんでいます。

編集:答えのおかげで、次のばかげたコードを思いつきました:

0 投票する
5 に答える
1143 参照

c - getch()関数のヘルプ

getch関数を使用して文字を取得したい...ユーザーはYまたはN文字しか入力できません..しかしwhileループが機能していません...助けが必要です!ありがとう

0 投票する
2 に答える
5972 参照

c++ - kbhit() と getch() の使用中にキー バッファをクリアする方法

幸いなことに、Windows 2000以降用の上記のWindows関数を使用していますが、コンソールでゲームを作成しているときに問題に遭遇しました:キーが押されるとすぐに、コンソールはkbhit( )キーが再び押されなくても機能します...

新しいキーを押さないと kbhit が渡されないように、キーボード プレス バッファをクリアする方法はありますか?

新しいライブラリのダウンロードが必要な場合は、できると思います...しかし、Windows標準の方法を望んでいます!

ありがとう!!

0 投票する
5 に答える
29402 参照

c - Cキーを押すと無限ループから抜けます

キーが押されたときに無限ループから抜け出すにはどうすればよいですか? 現在、私は getch を使用していますが、読み取る入力がなくなるとすぐにループがブロックされ始めます。

0 投票する
2 に答える
654 参照

python - getch() を使用してさまざまな長さの入力を取得することは可能ですか?

私は、比較的小さなコマンドライン RPG を作成して、新たに発見した Python の筋肉を鍛えるという冒険に乗り出しましたが、すでに難問に突き当たりました。私は getch() のこの実装を使用しています:

key矢印キーをキャプチャするために 3 文字で読み取るように設定しました。たとえば、Up は次のように読み込まれESC[Aます。このメソッドを使用key[2]すると、矢印キーが押されたかどうか、およびどのキーが押されたかを判断できます。他のあらゆる種類のキーもキャプチャしたいことを除いて、すべて順調です。qクエストログwasd用、移動用(矢印をいろいろな順番で押すのが攻撃方法になります)、その他多数。問題はすぐに明らかになります。getch()単一の文字のみを返す場合、矢印の機能は完全に失われます。

簡単な解決策がない場合は、矢印システムを完全に再考することを考えていますが、あるに違いないことはほぼ確実です. 確かに、私は 内で何が起こっているのかほとんど知りませんが、ttyどこかで読んだところによると、1 文字だけ読み取ると、矢印を押して余分な文字がバッファに保持されます。上記のバッファにアクセスするにはどうすればよいですか? あるいは、stdin可変長の入力を期待するように指示する賢い方法はありますか?

どうぞよろしくお願いいたします。

0 投票する
2 に答える
17738 参照

c - キーを押す前に getch() が戻るのはなぜですか?

マニュアルページによると、

getchいずれかのキーが押されるまで待機する必要があります

...しかし実際には、キーを押す直前に戻ります。(返される値は です-1)。

なんで?


アップデート

私はLinuxを使用しています。Press any key to exit.を使用していない場合、どのように実装できgetch()ますか?

getchar()Enterキーを押した後にのみ返されます。それは私が望むものではありません。

0 投票する
6 に答える
135408 参照

c - Linux の getch() & getche() に相当するものは何ですか?

Linux で conio.h の同等のヘッダー ファイルを見つけることができません。

getch()Linux に&getche()関数のオプションはありますか?

ユーザーが1つのキーを押すだけでオプションを提供し、プロセスを進める必要があるスイッチケースのベースメニューを作成したいと思います。ユーザーが自分の選択を押した後に ENTER を押させたくありません。

0 投票する
1 に答える
774 参照

python - process.Popen() からイベント getche() を発生させる方法 - stdin を監視しません

以下を使用して Windows でバイナリを起動しています。

これは、stdout から読み取る非ブロッキングのクールな方法でした。これは、この SO の質問に対する受け入れられた回答でした: subprocess.Popen.stdout (非ブロッキング) からすべての利用可能なデータを読み取るにはどうすればよいですか

これは、プロセスの起動/監視を試みるスクリプトの大部分です。

とにかく、このメソッドを使用してプロセスから読み取ることができます。次を使用してプロセスに書き込もうとすると:

i = process.stdin i.write("s\n") または i.write("s")

出力はコンソール ウィンドウに表示されますが、バイナリにはキャプチャされません。IDA Pro でバイナリを調べたところ、実行中にユーザー入力をキャプチャする非標準的な方法が使用されていることがわかりました。

このプロセスは、S、R、P、または Q (ステータス、再開、一時停止、終了) を待機するインタラクティブな cli ツールです。これは getche() を使用して実現されます。確認するために IDA Pro にバイナリを投げました。

このイベントをトリガーする方法を知っている人はいますか? これは有望に見えました: http://docs.python.org/library/msvcrt.htmlと私は使用してみました:

msvcrt.ungetch("s") "文字 char をコンソール バッファに「押し戻す」ようにします。これは、getch() または getche() によって読み取られる次の文字になります。"

これは文字「s」をコンソールにプッシュしましたが、getche() でブレークポイントをトリガーしませんでした。文字 S を手動で押すと機能し、IDA pro がブレークポイントにヒットします。

半分?:)

編集:

2 つの小さな Windows コンソール アプリを作成して、何が機能し、何が機能しないかを示し、Python が正常であることを確認しました。

この最初のものは、標準入力に書き込むことによって入力を認識することができず、2番目のものは認識できます。

これに書き込むことができます:

EDIT 2 私も試しました: import subprocess import time from e import * import msvcrt