【发布时间】:2020-09-05 08:03:22
【问题描述】:
void review2()
{
int ch;
while((ch = getchar()) != EOF)
putchar(ch);
putchar('\b');
putchar('\n');
putchar('\007');
}
在这段代码中,当我输入“qweCtrl+DCtrl+D”时不显示退格。结果是:
$ ./a.out
qweqwe
$
void review2()
{
int ch;
while((ch = getchar()) != EOF)
putchar(ch);
putchar('\b');
putchar('\007');
}
在这段代码中它是显示退格。 结果是
$ ./a.out
qweqw$
为什么会这样?
【问题讨论】:
-
屏幕上的退格键是非破坏性的,即它不会首先覆盖已经存在的内容。尝试
putchar('\b');putchar(' ');putchar('\b');用空格覆盖预先存在的数据 -
@pmg 在第二个示例中,'\b' 覆盖 'e',但在第一个示例中由于某种原因我不知道 putchar('\n') 会中断此过程。
-
不,
'\b'将“打印位置”移动到“e”之上,在第二个示例中,“e”被“$”覆盖;在第一种情况下,“e”被(不可见,透明,逻辑)“\n”覆盖 -
ctrl-d 是eot,不是bs