为什么没有从前面识别\ b。 K& R中的1-10?

时间:2013-01-08 10:21:53

标签: c kernighan-and-ritchie

#include <stdio.h>
/* replace tabs and backspaces with visible characters */

main()

{
    int c;

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

当我按退格键时,为什么我无法看到\ b退格签名?

3 个答案:

答案 0 :(得分:1)

你需要了解else,if-ladder非常可怕。

你的终端可能不会发送一个退格字符,它可以是a bit complicated实际终端程序如何代表那种“特殊”键(删除是另一个最喜欢的)。

答案 1 :(得分:1)

如果您使用类似unix的系统,可能需要阅读:http://en.wikipedia.org/wiki/Cooked_mode

在其他操作系统上,我不知道,但他们也可能会根据您的意见做些事情。

答案 2 :(得分:1)

Terminal处理的部分字符。所以你无法控制它。请检查此answer

我在我的MAC终端尝试过。但是我没有在answer中获得值1278。我为32字符获得了backspace。因此,当我使用if尝试32条件时,会打印出\b值。

if (c == 32 || c == 8)
    printf("\\b");