文字列をトークン化し、単語ごとにゆっくりと出力する C プログラムを作成したいと考えています。同時に、ユーザーが Enter キーを押すのをリッスンし、その時点でデータを入力できるようにしたいと考えています。これは可能ですか?
2 に答える
更新: 追加の役立つ情報については、以下の @modifiable-lvalue のコメントを参照してください。たとえば、getchar()
getch() の代わりにそのルートを使用する場合。
間違いなく可能です。解釈はそれ自体を入力するのではなく、「今、ユーザーは、必要なだけ文字列を入力しました」と解釈するgets()
ため、この目的には完全に役立つとは限らないことに注意してください。gets()
したがって、Enter キーを押すだけで収集された入力gets()
は、空の文字列として表示されます (これは機能する可能性があります)。http://www.cplusplus.com/reference/cstdio/gets/を参照してください。しかし、gets() を使用しない理由は他にもあります。読み込みの最大値を指定できないため、使用しているバッファが何であれ簡単にオーバーフローしてしまいます。セキュリティとバグの悪夢が待っています。これfgets()
により、読み込む最大サイズを指定できます fgets()
。Enter キーが押されると、文字列に改行が挿入されます。(ところで、fgets()の@jazzbassrobへの小道具)。
-- のようなものを検討することもできますgetch()
。これは、個々のキーの押下を実際に処理します (ただし、簡単ではないスキャンコードを持つキーの処理が少し複雑になります)。次の例が役に立つかもしれません: http://www.daniweb.com/software-development/cpp/code/216732/reading-scan-codes-from-the-keyboard。ただし、スキャンコードの問題のため、getch()
プラットフォームの詳細に左右されます。
したがって、より移植性の高いアプローチが必要な場合は、 ncursesなど、より重いがかなり移植性のあるものを使用する必要がある場合があります。
enter は改行だけの文字列を与えることfgets()
を念頭に置いて、 またはgetch()
.
発生する可能性のある実装/プラットフォームの問題のいくつかに注意してください.
C はこれを完全に行うことができますが、最初の試行で推測するよりも少し複雑です。これは、歴史的に端末入力がプラットフォームに大きく依存しているためです。
conio.h ライブラリと、ゲーム作成におけるその使用法を確認してください。Borland でコンパイルできます。これは、バッファリングされていない入力とリアルタイムでのキープレスのリッスンの最初の経験でした。もちろん他の方法もありますが。