1

このK&Rの質問を解決しようとしています。このコードを CodeBlocks で試しました。

int main()
{
    int c, d;
    while ( (c=getchar()) != EOF)
    {
        d = 0;
        if (c == '\\')
        {
            putchar('\\');
            putchar('\\');
            d = 1;
        }
        if (c == '\t')
        {
            putchar('\\');
            putchar('t');
            d = 1;
        }
        if (c == '\b')
        {
            putchar('\\');
            putchar('b');
            d = 1;
        }
        if (d == 0)
            putchar(c);
    }
    return 0;
}

しかし、バックスペースを押すと \b が代わりに表示されません。 ここに画像の説明を入力

私を助けてください。

4

3 に答える 3

1

これは、コンソール ウィンドウがキーボードと編集キー自体を処理するためです。

Windowsコンソールの機能、特に機能を調べる必要がありSetConsoleModeます。


ENABLE_PROCESSED_INPUTおよびENABLE_LINE_INPUTフラグをクリアするには:

// Get the console handle for `stdin`
HANDLE hConsoleStdin = GetStdHandle(STD_INPUT_HANDLE);

// Get the current flags
DWORD flags;
if (GetConsoleFlags(hConsoleStdin, &flags))
{
    // Now `flags` contain the current flags
    // Remove the flags we don't want there
    flags &= ~(ENABLE_PROCESSED_INPUT | ENABLE_LINE_INPUT);

    // And finally set the new flags
    SetConsoleFlags(hConsoleStdin, flags);
}

注: Windows マシンにアクセスできないため、上記のコードはテストされていません

于 2012-11-18T19:04:32.893 に答える
0

Linux環境でこれを実現する方法の詳細は、ここで回答されました

于 2012-11-18T19:21:44.963 に答える
0

実際の問題は、コンソールがバックスペースをプログラムに渡さず、入力バッファーから文字を削除することです。@JoachimPileborg が言ったように、SetConsoleMode およびその他の関数の使用を参照してください。

于 2012-11-18T19:06:58.313 に答える