2017-01-20 5 views
0

私はscanfを使って入力を入れた後、Enterキーを押して値を変数に入れると、新しい行を自動的に作成します。例えばscanfを使って新しい行を作成しない方法はありますか?

write any float : 12.34 
here is your type : 12.34 

私は上記の必要はありませんが、私はそれは以下のようになりたい、

write any float : 12.34 here is your type : 12.34 

はどうすればこれを行うことができますか? scanfを使ってこれを行う方法がない場合は、私に代替案を教えてください。

ありがとうございました。

+0

あなたはfcanf()を試しましたか?なぜなら、コンパイラでは、改行で区切られているため、停止できないと思います。 – NeoR

+2

あなたが使っているコンソールや端末の動作を説明しています.scannerf()とは関係ありません。 Cプログラムのユーザーインターフェースは過去40年間で大きな進歩を遂げていませんでしたが、今日あなたのOSにはより良いオプションが用意されています。 –

+0

@ NeoRあなたはfscanfを意味しますか?私はfcanf関数を見つけることができません.. –

答えて

7

あなたは携帯用の方法ではできません。

背後の論理的根拠は、キーボード入力が通常はエコーされ、行の向きが逆になって低レベルで処理され、プログラムへの有効な入力のみが表示されることです。相手は、新しい行キー(Enter)がヒットしたときにのみ入力が利用可能であり、エコーのために自動的にカーソルが新しい行の先頭に移動することです。

  • フルGUIプログラムを使用します。

    可能性はどのようなものです。ウィンドウに入力フィールドがあり、通常はボタンをクリックすることによって検証が行われます。

  • はスクリーン位置決めライブラリを使用します。 cursesは、Unix-Linuxの世界ではよく知られたライブラリですが、Windowsの世界にはポートが存在します。これにより、カーソルを画面上の絶対位置に置くことができ、前の入力の直後にカーソルを移動することができます。
  • 生の入力を使用する - cursesが何をしているのか。すべての着信文字がプログラムに直接当てられ、自動エコーは発生しません。バックスペースを含め、受信した各文字をエコーする準備ができている必要があります(自動的に大文字または小文字の入力を希望する場合は可能です)。これは実際には低レベルの処理であり、残念なことに、Windows(conio関数の検索)とUnix-Linux(rawとvcの入力の検索)では異なる動作をします。
  • それぞれの入力後に次の行に行き、すべての入力は一般的なので、ユーザーを驚かせるべきではありません。
関連する問題