我试着执行K&R的1.10,所以这是:

/*
 * Exercise 1.10
 *
 * Write a program to copy its input to its output, replacing each tab
 * by \t, each backspace by \b, and each backslash by \\. This makes tab
 * and backspaces visible in an unambiguous way.
 *
 */
#include <stdio.h>

int main()
{
    int c;

    while ((c = getchar()) != EOF) {
        if (c == '\t')
            printf("\\t");
        else if (c == '\b')
            printf("\\b");
        else if (c == '\\')
            printf("\\\\");
        else
            printf("%c", c);
    }
}

如果我使用gcc -std=c99 1.10.c -o test编译此代码
如果我使用backspace,它不会打印\b。为什么?在Linux中,我怎样才能尝试按Backspace键?
有个人对我说:
你的程序可能看不到那个退格。默认情况下,终端按行缓冲。斯特丁也是。好吧,stdin的缓冲区是idb。

最佳答案

通常,控制台解释特殊字符,如backspace或ctrl-d。您可以使用stty命令控制台不要这样做。
在运行程序之前,可以将tty设置为ignore backspace mode

stty erase ''

然后用
stty sane

这会将未更改的退格字符ctrl-h传递给正在运行的程序。
如果这没有显示任何差异,那么backspace键可以映射到del而不是ctrl-h。
在这种情况下,您只需启动程序,然后在使用backspace键的任何地方键入ctrl-h。如果仍要捕捉退格键,则还必须检查DEL,即ASCII 127
/* ... */
else if (c == '\b' || c == 127)
    printf("\\b");

关于c - 在Linux终端中无法检测到退格键,K&R 1.10执行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23958647/

10-09 03:58