【问题标题】:Backspace key not working in C++ code退格键在 C++ 代码中不起作用
【发布时间】:2018-03-16 20:19:08
【问题描述】:

我正在尝试制作一个 C++ 程序,该程序接受用户的用户名和密码,并将其与已存储在变量中的用户名和密码相匹配。对于密码,出于隐私考虑,我使用 *(星号)字符而不是实际字符来显示。

#include <iostream.h>
#include <conio.h>
#include <dos.h>
#include <string.h>

void main(void) {
    clrscr();

    gotoxy(10,10);
    cout << "Username: ";
    gotoxy(10,12);
    cout << "Password: ";

    char name1[10] = {"Apple"};
    char name2[10];
    char pass1[10] = {"Orange"};
    char pass2[10] = {""};

    gotoxy(23,10);
    cin >> name2;
    gotoxy(23,12);
    cout << pass2;

    int i = 0;
    char ch;

    while ((ch = getch()) != '\r') {
        putch('*');
        pass2[i] = ch;
        i++;
    }

    if (strcmp(name1, name2) == 0 && strcmp(pass1, pass2) == 0) {
        clrscr();
        gotoxy(40,10);
        cout << "YES!!!";
    } else {
        clrscr();
        gotoxy(40,10);
        cout << "NO!!!";
    }
}

问题是当我尝试使用键盘上的退格键时,我没有删除字符,而是在其末尾添加了更多字符。我可以通过导入 C 语言的 string.h 库来使其工作。但是有什么方法可以通过使用代码中已经定义的库来使其工作,而不必使用 string.h 库。

【问题讨论】:

  • 退格是一个字符...相应地处理它
  • 如果您尝试将密码作为输入,shell 通常会通过使您的输入静音(隐藏它)来实现。如果您使用的是 Windows,请参阅 these questions
  • 在你的 while 循环中处理它:if (ch == '\010' &amp;&amp; i) { cout &lt;&lt; "\010 \010"; --i; } else { ...existing stuff for other chars... }
  • 顺便说一句,您可以将退格称为 '\b'。

标签: c++


【解决方案1】:

问题是当我尝试使用键盘上的退格键时,我并没有删除字符,而是在其末尾添加了更多字符

正确!当您使用退格键时,它实际上会生成一个退格字符(ASCII 0x8)。退格键不会“删除字符”;您只是认为它确实如此,因为通常编写软件来查找退格字符并在遇到它们时表现出特殊的行为。在这种情况下,该软件的作者是

您需要查看ch 的值,看看它是否是退格字符……如果是,请“做必要的事情”(只有您知道这是什么)。

我可以通过导入 C 语言的 string.h 库来使其工作。

包含string.h与此无关,不会对此产生影响。

【讨论】:

    【解决方案2】:

    Backspace 被认为是“非打印字符”,这是此行为的来源。您可能必须按照您在问题中已经考虑过的方式处理它。

    您可以单击此处快速浏览此字符和其他非打印字符。 http://www.physics.udel.edu/~watson/scen103/ascii.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-11
      • 1970-01-01
      • 2012-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-22
      相关资源
      最近更新 更多