C 退格可以';无法在linux终端中检测到,K&;R 1.10锻炼
我试着做k&r的Exeize 1.10,所以这是:C 退格可以';无法在linux终端中检测到,K&;R 1.10锻炼,c,linux,konsole,C,Linux,Konsole,我试着做k&r的Exeize 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. * *
/*
* 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);
}
}
/*
*练习1.10
*
*编写一个程序,将输入复制到输出,替换每个选项卡
*按\t,每个反斜杠按\b,每个反斜杠按\\。这是我的账单
*以及清晰可见的退格。
*
*/
#包括
int main()
{
INTC;
而((c=getchar())!=EOF){
如果(c=='\t')
printf(“\\t”);
else如果(c=='\b')
printf(“\\b”);
else if(c=='\\')
printf(“\\\”);
其他的
printf(“%c”,c);
}
}
如果我使用gcc-std=C991.10.c-o测试编译此代码
如果我使用退格,它不会打印\b
。为什么?在Linux中,我如何尝试按Backspace键获取\b
有个人对我说:
你的程序可能没有看到那个退格。默认情况下,端子按行缓冲。斯丁也是。stdin的缓冲是IDB
您的代码不起作用,因为它打算在非常旧的UNIX机器上运行。在现代终端上,不会考虑退格字符。您的代码不起作用,因为它打算在非常旧的UNIX机器上运行。在现代终端上,不会考虑退格字符。
\include
#include <termios.h>
#include <unistd.h>
int mygetch(void)
{
struct termios oldt,
newt;
int ch;
tcgetattr( STDIN_FILENO, &oldt );
newt = oldt;
newt.c_lflag &= ~( ICANON | ECHO );
tcsetattr( STDIN_FILENO, TCSANOW, &newt );
ch = getchar();
tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
return ch;
}
#包括
int mygetch(无效)
{
结构termios oldt,
蝾螈;
int-ch;
tcgetattr(标准文件号和旧文件号);
newt=oldt;
newt.c|lflag&=~(ICANON | ECHO);
tcsetattr(标准文件号、TCSANOW和NETT);
ch=getchar();
tcsetattr(标准文件号、TCSANOW和oldt);
返回ch;
}
使用getch然后使用它获取用于backsape的ASCII,不需要输入或清除输入缓冲区,它返回一个int。
享受#包括
#包括
int mygetch(无效)
{
结构termios oldt,
蝾螈;
int-ch;
tcgetattr(标准文件号和旧文件号);
newt=oldt;
newt.c|lflag&=~(ICANON | ECHO);
tcsetattr(标准文件号、TCSANOW和NETT);
ch=getchar();
tcsetattr(标准文件号、TCSANOW和oldt);
返回ch;
}
使用getch然后使用它获取用于backsape的ASCII,不需要输入或清除输入缓冲区,它返回一个int。
享受通常,控制台解释特殊字符,如backspace或Ctrl-d。您可以指示控制台不要使用 在运行程序之前,您可以将tty设置为使用忽略退格模式
stty erase ''
然后用
stty sane
这会将退格字符Ctrl-h原封不动地传递给正在运行的程序
如果这没有显示任何差异,那么backspace键可能映射到DEL而不是Ctrl-h 在这种情况下,您只需启动程序,并在使用backspace键的任何位置键入Ctrl-h。但是,如果您想抓住退格键,还必须检查
DEL
,这是
通常,控制台解释特殊字符,如backspace或Ctrl-d。您可以指示控制台不要使用 在运行程序之前,您可以将tty设置为使用忽略退格模式
stty erase ''
然后用
stty sane
这会将退格字符Ctrl-h原封不动地传递给正在运行的程序
如果这没有显示任何差异,那么backspace键可能映射到DEL而不是Ctrl-h 在这种情况下,您只需启动程序,并在使用backspace键的任何位置键入Ctrl-h。但是,如果您想抓住退格键,还必须检查
DEL
,这是
该练习旨在在非常旧的UNIX机器上工作。我认为从那时起,终端的工作方式发生了变化。您可能需要在
ansi
或vt100
终端仿真上执行代码。该练习旨在在非常旧的UNIX机器上工作。我认为从那时起,终端的工作方式发生了变化。您可能需要在ansi
或vt100
终端仿真上执行代码。即使在运行程序之前键入代码,\b也不会打印。然后,退格键不是Ctrl-h
,而是DEL
。请查看更新的答案。即使在我运行程序之前键入您的代码,\b也不会打印。然后,您的退格键不是Ctrl-h
,而是DEL
。请参见K&R?第16页更新的answer.mm,使其更加复杂??无论如何,谢谢你,也许过一会儿我会理解你的代码:)嗯,对于K&R第16页的代码来说太复杂了??无论如何,谢谢你,也许过一会儿我会理解你的代码:)