此程序将其输入复制到其输出,将\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
答案 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,它是退格键。