如何将退格键更改为"\b"?

How can I change backspace to ''?

本文关键字:      更新时间:2023-10-16

我在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);
    }
相关文章:
  • 没有找到相关文章