0

密码程序不起作用....请帮助....对于正确的输入也说错误的密码

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

void main()
{  
  clrscr();
  int ctr=0;
  int  o;
  char pass[5];

  cout<<"enter password";
  for(int i=0;i<5 && (o=getch())!=13  ;i++)
  {  
    pass[i]=o;

    putch('*');
  }

  ctr=strcmp(pass,"luck");
  cout<<ctr;
  if(ctr==0)
  {
    cout<<"welcome";
  }
  else
  {
    cout<<"wrong password";
  }
  getch();
}

我想知道为什么这个密码程序不起作用....是他们的任何其他方式

4

2 回答 2

6

为了能够使用strcmp(),您需要 NUL 终止pass。您还需要确保它pass足够大以容纳 NUL。

于 2013-01-05T08:48:05.847 回答
0

<conio.h>使用中,我假设正在使用 Windows。对于那些感兴趣的人,这里是正确方法的开始。我输入了一行作为密码,在按下 enter 时结束,并且不显示星号,因为它们很容易泄露长度。

//stop echoing input completely
HANDLE inHandle = GetStdHandle(STD_INPUT_HANDLE); //get handle to input buffer
DWORD mode; //holds the console mode
GetConsoleMode(inHandle, &mode); //get the current console mode
SetConsoleMode(inHandle, mode & ~ENABLE_ECHO_INPUT); //disable echoing input

//read the password
std::string password; //holds our password
std::getline(std::cin, password); //reads a line from standard input to password

//compare it with the correct password
std::cout << (password == "luck" ? "Correct!\n" : "Wrong!\n"); //output result

//return console to original state
SetConsoleMode(inHandle, mode); //set the mode back to what it was when we got it

当然,您可以做一些事情来改进它(硬编码的密码字符串绝不是一件好事),如果您愿意,可以继续这样做,但关键是它可以作为基本的密码输入系统,并且有一个简单的- 跟随结构。在输入密码时,您仍然可以使用您喜欢的东西,而不是一次输入一个字符并诉诸 C 字符串和代码。

于 2013-01-05T09:11:15.080 回答