2013-05-29 10 views
6

ENTERを押した後、現在の行にカーソルを置く方法があるかどうか尋ねたいと思います。例えばC/C++:Enterキーを押した後、現在の行にカーソルを置くことはできますか?

...

#include<stdio.h> 
int main() 
{ 
    int d=0; 
    printf("Enter a number : "); 
    scanf("%d",&d); 

    if(d%2)printf(" is a Odd number\n"); 
    else printf(" is a Even number\n"); 
    return 0; 
} 

出力の例:

Enter a number : 10 
is a Even number 

...しかし、私は必要なのようなものです:

Enter a number : 10 is a Even number 

私がしたいですユーザーが入力した番号の横に「偶数番号」(または「奇数番号」)を入力します。

+3

は、rawモードで、あなたの 'tty'を入れカーソルです。 'man ncurses'。たくさんの仕事の準備をしてください。 –

+0

'C++'タグを削除しました。これは 'c'です。 – BoBTFish

+1

@BoBTFish:それをしないでください。彼がC++コンパイラを使用しているなら、これはC++です。 –

答えて

1

libにいくつかの出力を使用する必要があります簡単な答えは、あなたがすることはできません「であるprintf("%c", (char)8);でプレイしてみてください"この振る舞いを制御したり、最後にEnterキーを押すことなくデータを読み込む標準のC++関数はありません(実際には、enterキーを押すまでデータは実際には "入力"されていないため、データは表示されません) 。

「curses」ライブラリやシステム依存コードなどの追加ライブラリなど、標準ではない機能を使用できますが、コードを作成して一度に1文字ずつ読み込んで一緒にマージする必要がありますあなたが書いたコード。

printf("%d is", d); 
if (d%2) 
    printf("an odd number\n"); 
else 
    printf("an even number\n"); 
3

ユーザーはEnterキーを押しています。これはエコーバックされ、新しい行が始まります。

これを避けるには、エコーをオフにしてから、改行以外の個々の文字を読み取り、エコーする必要があります。これはシステムに依存します。例えば、Linuxでは、ttyをraw/uncookedモードにすることができます。

ほとんどの作業を行うGNU readlineなどのライブラリがあります。

0

printfscanf ... getc()ungetc(char)で試してみましたか?

OR、私はそれがバックスペースそう

だ記憶が正しければ、あなたはおそらく、このようなncursesのよう

+0

-1、答えの最初の半分は機能しません。キャリッジリターンを "元に戻す"ことはできません。改行 – unwind

+0

gechar()で試してみましたが動作しません... '@Mats Petersson'& '@Ben Voigt'によると、それを行う標準的な機能はありません... – BBeta

+1

Iごめんなさい...私はあなたを惑わしました...私はmode3; int10hで画面をクリアするために(char)8を書きましたが、ここではおそらく適用されません。とにかく私たちは変わっているので、あなたのプラットフォームがそれをサポートしているならば、conio.hのkbhit()(http://www.cprogramming.com/fod/kbhit.html) – Exceptyon

1

設定し、生のキーボードモードと無効のカノニカルモード:

は、私はあなたが「出力の入力を繰り返し」、および単にこのような何かを使用することをお勧めします。 これは、Linuxがターミナルにパスワード文字を表示しないようにする方法です。

Termio structは、Googleですべきことです。

一つのリンクは次のとおりです。

http://asm.sourceforge.net/articles/rawkb.html

アセンブリの定数

は、システムコールioctlのためにも利用できます。

1

vt100スタイルの端末を使用している場合、このトリックが役立ちます:カーソル移動。

\033は、ESC、ESC + [ + AはカーソルアップしているESC + [ + Cで右

int main() 
{ 
    int d=0; 
    printf("Enter a number : "); 
    fflush(stdout); 
    scanf("%d",&d); 
    printf("\033[A\033[18C%d is a an %s number\n", d, d%2 ? "odd" : "even"); 
    return 0; 
} 
関連する問題