アプリ版:「スタンプのみでお礼する」機能のリリースについて

標準入力上でできるゲームを作成しているのですが
特定のキー(数字)などは受け付けて、Enterのみ入力された場合は改行すらしない
というようなことはできますか?

例えば
=====
1. Yes
2. No
=====

のような画面がprintされているとき
1 or 2 + Enter の場合は入力を受けつけ次の画面へうつりますが
Enterだけの場合は上の状態に留めたいです。
(一度改行した後上に戻るという処理でもいいです)

A 回答 (5件)

方法はいろいろあると思うけれど、一番簡単なのはエコーバックしないようにしてしまうのがいいんじゃないでしょうかね?



termios と エコーバックで 調べてみてください。

※ 入力された文字を自分でprintfしてあげる必要がありますけど。。
    • good
    • 0
この回答へのお礼

ありがとうございます!
エコーバックのオンオフで目的通りのものができました!

お礼日時:2012/05/13 11:47

そもそも、標準入力はキーボードとは限らないので、そういうことをしたいなら専用の手段を使うのがいいとおもいます


ncoursesとかreadtineとか
    • good
    • 0

端末画面制御なので、標準入出力だけでは難しいでしょう。



一つの方法は、cursesのAPI関数でカーソル位置を制御することです。
cursesの歴史は古く、いくつかの実装が存在しますが、Linuxをお使いなら恐らくncursesライブラリが入っているでしょう。ncursesの使い方は、Linuxのシステムプログラミング関係の書籍などに載っていると思います。ただ、少しプログラムが煩雑になりますね。

プログラムを実行する端末エミュレータソフトやシェルをどれか一つに限定してよいなら、制御コードを標準出力に直接出力することでも、希望されていることを実現できるかもしれません。「エスケープシーケンス」や「ANSI」などのキーワードで検索してみてください。
    • good
    • 0

> 1 or 2 + Enter の場合は入力を受けつけ次の画面へうつりますが



これと同じように、Enter の場合は入力を受けつけ次の画面(実は同じ内容の画面)に移ればいいでしょう。

この回答への補足

標準入力でひたすら擬似ウィンドウを流していくだけなので
画面を呼び直すと結局行が流れてしまいます。。

補足日時:2012/04/21 14:10
    • good
    • 0

OSはWindowsですか?



>Enterだけの場合は上の状態に留めたいです。

入力内容の先頭文字(配列の[0])が'\n'かどうかを判断すれば
大丈夫ではないか、と思います。

そのうえで、
system("cls"); // MS-DOSの画面消去コマンド
printf("=====\n");
printf("1.Yes\n");
printf("2.No\n");
printf("=====\n");
というメニューを出力するための仕組み(関数か何か)を用意すればよいのではないか、という気がします。

そういう気がしているだけで、全く的外れな回答であるかもしれませんけれど。

この回答への補足

OSはLINUXです。
できるだけ画面、関数の呼び直しはしないで
入力時に制御できればと思っているのですが難しいでしょうか

補足日時:2012/04/21 13:38
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!