web-dev-qa-db-ja.com

Cで入力テキストカーソルを配置する方法

ここに私は非常に単純なプログラムを持っています:

 printf("Enter your number in the box below\n");
 scanf("%d",&number);

ここで、出力を次のようにします。

 Enter your number in the box below
 +-----------------+
 | |*|             |
 +-----------------+

| * |ユーザーが値を入力する点滅カーソルです。

Cは線形コードであるため、ボックスアートを出力せず、出力を要求します。最初の行と左の列を出力し、入力の後に、下の行と右の列を出力します。

それで、私の質問は、おそらくボックスを最初に印刷してから、カーソルをボックスに戻す関数を使用できるでしょうか?

9
It'sRainingMen

Unixターミナル(xtermgnome-terminal ...)、コンソールコードを使用できます。

#include <stdio.h>

#define clear() printf("\033[H\033[J")
#define gotoxy(x,y) printf("\033[%d;%dH", (y), (x))

int main(void)
{
    int number;

    clear();
    printf(
        "Enter your number in the box below\n"
        "+-----------------+\n"
        "|                 |\n"
        "+-----------------+\n"
    );
    gotoxy(2, 3);
    scanf("%d", &number);
    return 0;
}

または ボックス描画文字 を使用:

printf(
    "Enter your number in the box below\n"
    "╔═════════════════╗\n"
    "║                 ║\n"
    "╚═════════════════╝\n"
);

より詳しい情報:

man console_codes
20
David Ranieri

Linuxターミナルでは、ターミナルコマンドを使用してカーソルを移動できます。

printf("\033[8;5Hhello"); // Move to (8, 5) and output hello

他の同様のコマンド:

printf("\033[XA"); // Move up X lines;
printf("\033[XB"); // Move down X lines;
printf("\033[XC"); // Move right X column;
printf("\033[XD"); // Move left X column;
printf("\033[2J"); // Clear screen

これは標準化されたソリューションではないため、コードはプラットフォームに依存しないことに注意してください。

9
Cantfindname

C言語自体には、カーソルのある画面の概念はありません。このサポートを提供するある種のライブラリを使用する必要があります。 curses は、端末制御用の最もよく知られ、広く利用可能なライブラリです。

1
luser droog