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_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 机器。

于 2012-11-18T19:04:32.893 回答
0

问题实际上是,您的控制台不会将退格传递给程序,而是从输入缓冲区中删除字符。正如@JoachimPileborg 所说,请参阅 SetConsoleMode 和其他功能的使用。

于 2012-11-18T19:06:58.313 回答
0

此处详细解答了如何在 Linux 环境中完成此任务。

于 2012-11-18T19:21:44.963 回答