简体   繁体   English

C ++中的密码程序

[英]Program for Password in C++

Password program not working....pls help....for right input also it says wrong password 密码程序不起作用.... pls帮助....对于正确的输入,它也说错了密码

#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();
}

I want to know why this password program not working....is their any other way 我想知道为什么此密码程序无法正常工作。

To be able to use strcmp() , you need to NUL-terminate pass . 为了能够使用strcmp() ,您需要使用NUL终止pass You also need to make sure that pass is large enough to accommodate the NUL. 您还需要确保pass足够大以容纳NUL。

As <conio.h> is in use, I'm assuming Windows is being used. 由于正在使用<conio.h> ,所以我假设正在使用Windows。 For those who are interested, here is a start on the proper way to do this. 对于那些有兴趣的人,这是开始执行此操作的正确方法的起点。 I input a line as the password, ending when enter is pressed, and don't show asterisks, as they give away the length pretty easily. 我输入了一行作为密码,在按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

Of course there are things you can do to improve it (a hardcoded password string is never a good thing), and go ahead and do so if you wish, but the point is that it works as a basic password input system and has an easy-to-follow structure. 当然,您可以做一些改进工作(硬编码的密码字符串永远都不是一件好事),如果愿意,可以继续这样做,但要点是,它可以作为基本的密码输入系统,并且操作简单跟随结构。 You can still use the things you love when getting a password input, rather than going one character at a time and resorting to C strings and code. 您仍然可以在输入密码时使用自己喜欢的功能,而不是一次输入一个字符并诉诸于C字符串和代码。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM