0

入力を解析し、履歴を上下にトラバースできますが、バックスペースが機能しません。何故ですか?

void printPrompt(void)
{ // prints working directory prompt
    char cwd[256];
    getcwd(cwd, 255);
    printf("%s> ", cwd);
    fflush(stdout);
}
4

2 に答える 2

5

DEL(12月8日)を送信する必要があるときに(12月127日)を印刷しようとしていますBSBSまた、おそらくその文字をクリアするためにスペースと別のスペースを送信する必要があります(BSカーソルを移動するだけです)。したがって、 が得られたらbuf[0] == 88, 32, を出力し8ます。

else if (buf[0] == 8)
{ // Backspace
    if (charsRead > 0)
    {
        line[charsRead - 1] = '\0';
        charsRead--;
        printf("%c%c%c", 8, 32, 8); // CHANGE HERE
    }
}
于 2013-03-12T16:47:33.720 に答える
0

バックスペースは機能しています。問題は、バックスペースの後の行の再表示です。おそらくキャリッジ リターン (\r) を出力してから、プロンプトを含む行を再出力する必要があります。

編集:私の提案が端末間で100%移植可能かどうかはわかりません。移植性の問題を処理するには、curses などを使用する必要がある場合があります。

于 2013-03-12T16:49:34.203 に答える