C KR-可视化退格

C KR-可视化退格,c,kernighan-and-ritchie,C,Kernighan And Ritchie,我遇到了这个KR练习1-10: 编写一个程序将其输入复制到输出,将每个制表符替换为\t,将每个空格替换为\b,将每个反斜杠替换为\\ 下面是一个非常简单的解决方案: #include <stdio.h> int main() { int c; const char TAB = '\t'; const char BACKSPACE = '\b'; const char BACKSLASH = '\\'; while( EOF != ( c =

我遇到了这个KR练习1-10:

编写一个程序将其输入复制到输出,将每个制表符替换为\t,将每个空格替换为\b,将每个反斜杠替换为\\

下面是一个非常简单的解决方案:

#include <stdio.h>

int main()
{
    int c;
    const char TAB = '\t';
    const char BACKSPACE = '\b';
    const char BACKSLASH = '\\';
    while( EOF != ( c = getchar() ) )
    {
        if( TAB == c )
        {
            printf( "\\t" );
        }
        else if( BACKSPACE == c )
        {
            printf( "\\b" );
        }
        else if( BACKSLASH == c )
        {
            printf( "\\\\" );
        }
        else
        {
            putchar( c );
        }
    }

    return 0;
}
#包括
int main()
{
INTC;
const char TAB='\t';
常量字符退格='\b';
常量字符反斜杠=“\\”;
而(EOF!=(c=getchar())
{
如果(TAB==c)
{
printf(“\\t”);
}
else if(退格==c)
{
printf(“\\b”);
}
else if(反斜杠==c)
{
printf(“\\\”);
}
其他的
{
普查尔(c);
}
}
返回0;
}
我发现可视化选项卡和
\
(反斜杠)可以正常工作,但不能使用反斜杠。控制台似乎不记得退格?我在Ubuntu 14.04上



这似乎是一个类似的问题,但不太确定是否相同。

我假设您在终端中运行程序,然后键入一些输入。 终端通常处于熟食模式,其中退格将立即解释为请删除上一个字符。
getchar()
永远不会返回退格

如果您想测试您的程序是否正确处理退格,请在标准输入上输入退格,此循环允许使用带有相关烹饪功能的终端:

 $ printf 'foo\bbar\n' | ./a.out
 foo\bbar

你说得对。您的代码很好,是终端比这个假设场景更高级。与问题无关,但是
c
应该是
int
,而不是
char
。是的,谢谢-修复了它。是的,我在终端上测试了它,确实,退格从未存储。顺便说一句,
stty(1)
manual页面中通常有关于
cooked mode
terminal?@artm构成cooked mode(以及所有其他终端设置)的任何阅读建议。