我试着执行K&R的1.10,所以这是:
/*
* Exercise 1.10
*
* Write a program to copy its input to its output, replacing each tab
* by \t, each backspace by \b, and each backslash by \\. This makes tab
* and backspaces visible in an unambiguous way.
*
*/
#include <stdio.h>
int main()
{
int c;
while ((c = getchar()) != EOF) {
if (c == '\t')
printf("\\t");
else if (c == '\b')
printf("\\b");
else if (c == '\\')
printf("\\\\");
else
printf("%c", c);
}
}
如果我使用
gcc -std=c99 1.10.c -o test
编译此代码如果我使用backspace,它不会打印
\b
。为什么?在Linux中,我怎样才能尝试按Backspace键?有个人对我说:
你的程序可能看不到那个退格。默认情况下,终端按行缓冲。斯特丁也是。好吧,stdin的缓冲区是idb。
最佳答案
通常,控制台解释特殊字符,如backspace或ctrl-d。您可以使用stty
命令控制台不要这样做。
在运行程序之前,可以将tty设置为ignore backspace mode
stty erase ''
然后用
stty sane
这会将未更改的退格字符ctrl-h传递给正在运行的程序。
如果这没有显示任何差异,那么backspace键可以映射到del而不是ctrl-h。
在这种情况下,您只需启动程序,然后在使用backspace键的任何地方键入ctrl-h。如果仍要捕捉退格键,则还必须检查
DEL
,即ASCII 127
/* ... */
else if (c == '\b' || c == 127)
printf("\\b");
关于c - 在Linux终端中无法检测到退格键,K&R 1.10执行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23958647/