13

私はCでプログラミングすることを学んでおり、コードの実行中に。を押さずに端末に文字を入力できるようにしたいと考えていますreturn。私のプログラムは動作しますが、を呼び出すと、を呼び出しinitscr()た後でも画面がクリアされfilter()ます。のドキュメントは、filterクリアを無効にする必要があることを示唆していますが、これは私には当てはまりません。

#include <stdio.h>
#include <curses.h>
#include <term.h>

int main(void) {

    int ch;

    filter();
    initscr();
    cbreak();
    noecho();
    keypad(stdscr, TRUE);

    while((ch = getch()) != EOF);

    endwin();

    return 0;
}

上記のコードがまだ画面をクリアにしているのはなぜですか?それを修正するために何ができるでしょうか?

私はDebianLenny(安定版)とgnome-terminalを使用しています。

4

4 に答える 4

2

mike.dldによる回答を拡張すると、これはMacOS X 10.6.6(GCC 4.5.2)でシステムcursesライブラリを使用して機能します-画面をクリアする必要はありません。入力した文字を記録する (ファイル "x" に記録される) 機能とCONTROL-D、ユーザーに強制的に中断させるのではなく、入力してプログラムを停止する機能を追加しました。

#include <stdio.h>
#include <curses.h>
#include <term.h>

#define CONTROL(x)  ((x) & 0x1F)

int main(void)
{
    FILE *fp = fopen("x", "w");
    if (fp == 0)
        return(-1);
    SCREEN *s = newterm(NULL, stdin, stdout);
    if (s == 0)
        return(-1);
    cbreak();
    noecho();
    keypad(stdscr, TRUE);

    int ch;
    while ((ch = getch()) != EOF && ch != CONTROL('d'))
        fprintf(fp, "%d\n", ch);

    endwin();

    return 0;
}
于 2011-01-23T04:42:57.367 に答える
1

基本的に、curses は画面 (ウィンドウ付き端末の場合はウィンドウ) を引き継ぐように設計されています。curses を stdio と実際に混在させることはできません。また、curses を使用して、画面の残りの部分をいじらずに何かを入力または出力することもできません。部分的な回避策はありますが、希望どおりに動作させることは決してできません。ごめん。

プログラム全体で curses を使用するように書き直すか、readline などの代替手段を調査することをお勧めします。

于 2014-03-01T23:44:00.890 に答える
0

newterm()の代わりに使用しinitscr()てください。delscreen()このアドバイスに従うかどうかを忘れないでください。

于 2011-01-23T03:20:15.090 に答える