BackSpace如何实际删除getChar()循环中的字符串


#include <stdio.h>
#include <conio.h>
#define ENTER_KEY 'n'
#define NULL_TERMINATOR ''
int main()
{
    char name[100], input;
    int counter = 0;
    while(input != ENTER_KEY)
    {
        input = getchar();
        name[counter] = input;
        counter++;
    }
    counter--;
    name[counter] = NULL_TERMINATOR;
    printf("%s", name);
    return 0;
}

如果我写了一些东西,它应该不断保存在 name 数组中。并且 counter 应该在我输入的每个字符上上升。但是,如果我按下靠背,看起来它会使计数器减少。因为例如,如果我写" ABCDEF"并按3次,然后将其更改为" Abcxyz",然后按Enter。它打印" abcxyz"。

它取决于控制台驱动程序。在大多数系统(至少在线路模式下和Windows控制台中),该程序目前未接收它们的字符,但是该系统会准备一条线(直至Newline字符),并将整个行发送到程序。

在这种情况下,如果经常用来编辑该 Console Buffer ,这意味着在将其交给程序之前,实际上将删除的字符删除。因此,如果键入abcdef<backspace><backspace><backspace>xyz<Return>,则程序将接收以下字符串:"abcxyzn"

当心,在GUI程序中或在全屏文本模式程序中,例如Emacs或vi,系统处于原始模式(UNIX语言),并且在键入时会收到每个字符。在这种情况下,该程序必须在接收<backspace>时管理输入并删除其自己的字符数组。

最新更新