理解C中的退格(\ b)行为

时间:2013-09-04 08:44:11

标签: c backspace

此程序将其输入复制到其输出,将\t退格(\t)的TAB(\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

的单独文件

2 个答案:

答案 0 :(得分:7)

退格程序由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

答案 1 :(得分:4)

如果我没有误解这个问题,你可以使用&#39; Ctrl-H&#39;发送退格。当您输入:

时,使用trojanfoe的更正代码
vinay^H

它将打印:

vinay\b

^ H表示&#39; Ctrl-H&#39;,它是ASCII字符#8,它是退格键。