我想解决这个K&R问题。我在代码块中试过这个代码。

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;
}

但当我按backspace时,不会显示b来代替它。
请帮帮我。

最佳答案

这是因为控制台窗口处理键盘和编辑键本身。
您必须查看Windowsconsole functions,特别是SetConsoleMode函数。
要清除ENABLE_PROCESSED_INPUTENABLE_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计算机。

关于c - 程序将其输入复制到输出,用\t替换每个制表符,用\b替换每个退格,并用\\替换每个反斜杠,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13443452/

10-12 23:01