我想解决这个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_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计算机。
关于c - 程序将其输入复制到输出,用\t替换每个制表符,用\b替换每个退格,并用\\替换每个反斜杠,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13443452/