C KR-可视化退格
我遇到了这个KR练习1-10: 编写一个程序将其输入复制到输出,将每个制表符替换为\t,将每个空格替换为\b,将每个反斜杠替换为\\ 下面是一个非常简单的解决方案: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 =
#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(以及所有其他终端设置)的任何阅读建议。