10

该程序将其输入复制到其输出,将 TAB( \t)替换为\tbackspace( \b) \b。但是在我的代码中,当我输入退格键时,我无法读取输入字符,它不会像选项卡一样被替换。

在 Linux 中使用 GCC 编译:

#include<stdio.h>
int main(void)
{
    int c=0;
    while((c=getchar())!=EOF){
     if(c=='\t'){
      printf("\\t");
     if(c=='\b')
      printf("\\b");
    }
    else
     putchar(c); 
}
return 0;
}

假设如果我输入 vinay (tab) hunachyal

Output:vinay\thunachyal 

如果我输入 vinay(和 1 个退格键)

Output:vina

所以我的问题是为什么vina\b在这种情况下不打印?
是否可以检测\b和打印\b?如果不是什么原因

Note:我需要在运行时输入退格不提供具有 \b 的单独文件

4

2 回答 2

8

退格被 shell 解释器占用,所以你的程序永远看不到它,而且你的代码(稍微)坏了,由于大括号放错了,缩进效果不好。

这是一个更正的版本:

#include<stdio.h>
int main(void)
{
    int c=0;
    while((c=getchar())!=EOF){
        if(c=='\t')
            printf("\\t");
        else if(c=='\b')
            printf("\\b");
        else
            putchar(c);
    }
    putchar('\n');
    return 0;
}

按预期工作:

$ echo 'vinay\thunachyal\b' | ./escape
vinay\thunachyal\b
于 2013-09-04T08:46:11.687 回答
4

如果我没有误解问题,您可以使用“Ctrl-H”发送退格键。使用 trojanfoe 的更正代码,当您键入:

vinay^H

它将打印:

vinay\b

^H 表示 'Ctrl-H',它是 ASCII 字符 #8,即退格。

于 2014-05-15T06:11:25.243 回答