退格键不能在C ++代码中工作

时间:2018-03-16 20:19:09

标签: c++

我正在尝试创建一个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库来使其工作。

2 个答案:

答案 0 :(得分:1)

  

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

正确!当您使用退格键时,它实际上会生成退格字符(ASCII 0x8)。退格键不会“删除字符”;你只考虑它,因为软件通常是为了寻找退格字符并在遇到它们时特别表现。在这种情况下,该软件的作者是

你需要查看ch的值,看看它是否是一个退格符...如果是的话,“做必要的”(只有你可以告诉它是什么)。

  

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

包含string.h与此无关,对此无效。

答案 1 :(得分:0)

退格键被视为“非打印字符”,这是此行为的来源。您可能必须像处理问题中那样处理它。

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