KR - 可视化退格

KR - visualize backspace

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

Write a program to copy its input to its output, replace each tab by \t, each backspace by \b, and each backslash by \ .

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

#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;
}

我发现它可以可视化 Tab\(反斜杠)但不能可视化 Backspace。看起来 Backspaces 没有被控制台记住?我在 Ubuntu 14.04.


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

我假设您 运行 您的程序在终端中,然后键入一些输入。 终端通常处于熟化模式,退格键会立即被解释为请擦除前一个字符getchar() 永远不会 return 退格。

如果你想测试你的程序是否正确处理退格键,管道它们在标准输入上,这避免了使用带有相关烹饪的终端:

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