【发布时间】:2014-11-13 00:48:50
【问题描述】:
我在《The C programming language》中看到一个问题,是这样的: 编写一个程序将其输入复制到其输出,用 \t 替换每个制表符,用 \b 替换每个退格键,用 \ 替换每个反斜杠。这使得标签和
退格以明确的方式可见。 然后我写一个这样的程序
#include<stdio.h>
int main(void)
{
int c;
while((c=getchar())!=EOF)
{
if(c=='\t')
{
putchar('\\');
putchar('t');
}
if(c=='\b')
{
putchar('\\');
putchar('b');
}
if(c=='\\')
{
putchar('\\');
putchar('\\');
}
else{
putchar(c);
}
}
return 0;
}
但是当我输入退格时,我不能得到'\b',那么我怎样才能得到输出'\b',即我的意思是,我怎样才能输出退格?
【问题讨论】:
-
你得到了什么输出?选项卡的行为是否正确?
-
我认为没有一个简单的答案。这取决于您的终端等 - 它可能会缓冲您键入的所有内容,然后在您按 Enter 时将其发送到您的程序。如果是这种情况,它可能会为您处理退格,而您的程序将永远不会看到它们。
-
我相信
puts可能效率更高,比如puts("\\t");。它将两个函数调用替换为一个。 -
switch语句更易读,恕我直言。 -
您的
else仅与最后一个if相关联,因此您在 '\t' 和 '\b' 的转义序列之后打印原始字符......所以实际退格字符可能会在您打印后吃掉“b”。
标签: c++ c visual-c++