如何将退格键更改为"\b"?
How can I change backspace to ''?
我在C编程语言中看到一个问题。是这样的:编写一个程序将其输入复制到其输出中,将每个制表符替换为 \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"? 即,我的意思是,如何输出退格?
键盘输入由操作系统预处理。大多数字符直接作为程序的输入输入,但有些字符是专门处理的。
在类 UNIX 系统上,标准输入通常是行缓冲的。系统会读取一整行文本,并且在您按 Enter 之前不会将其传递给您的程序。 在读取该行时,系统会自行处理退格键;它不会向缓冲区添加退格字符,而是擦除最新的字符。程序永远不会看到'b'
字符。
要输入程序可以看到的文字退格字符,在类 UNIX 系统上,可以在它前面加上 Ctrl-V。 根据您的 tty 和终端模拟器设置,键入退格键可能会传输 ASCII DEL 字符而不是退格键。若要确保程序看到退格符,请键入 Ctrl-V Ctrl-H。
在非类UNIX系统(很可能是Windows)上,可能有一种方法可以做类似的事情,但我不知道它是什么。
您还可以使用文件中的输入运行程序。将文本退格字符放入输入文件将保留为练习(这取决于文本编辑器的工作方式)。
getchar
函数缓冲用户输入,并仅在用户按 Enter 时才将其发送到程序。按照建议,您必须使用 getch()
来检测每个按键。
您的代码必须是:
#include<stdio.h>
#include<conio.h>
int main(void)
{
int c;
while ((c = getch()) != EOF)
{
if (c == 't')
{
putchar('');
putchar('t');
}
else if (c == 'b')
{
putchar('');
putchar('b');
}
else if (c == '')
{
putchar('');
putchar('');
}
else if (c == 'r')
{
putchar('n');
}
else{
putchar(c);
}
}
return 0;
}
getch 将 Enter 检测为r
,因此如果要转到下一行,则必须手动将其替换为 n
。
退格通常被外壳吃掉。使用 Ctrl + H 测试退格键。
见 5.删除和退格键以获取更多详细信息。
在你的代码中,你有三个if
,最后只有一个......所以你的其他只与最后if
绑定. 对于制表符和退格键,由于它们不是反斜杠,因此最后一个if
测试为 false,并且 else
块执行打印原始字符。 这意味着在打印"\t"后,您打印一个选项卡(并且可能会在输出中看到一些空白区域),而在打印"\b"后,您打印一个退格键,该退格键会吃掉"b"或使其被下一个字符覆盖。 要修复它,请使用:
if(c == 't')
{
putchar('');
putchar('t');
}
else if(c=='b') /* "else if" rather than "if" */
{
putchar('');
putchar('b');
}
else if(c=='')
{
putchar('');
putchar('');
}
else{
putchar(c);
}
。或者干脆用开关重写它:
switch(c)
{
case 't':
puts("\t");
break;
case 'b':
puts("\b");
break;
case '':
puts("\\");
break;
default:
putchar(c);
}
- 没有找到相关文章