Как я могу прочитать пароль с консоли, повторяя знаки? - PullRequest
1 голос
/ 29 июля 2011

здесь я написал код для принятия пароля, введенного пользователем после того, как он ввел свое имя пользователя, я написал небольшой код с помощью оператора do while, чтобы вывести звездочку каждый раз, когда пользователь вводит какой-либо символ, ицикл завершается, когда пользователь вводит «!».но меня удивило, когда я вижу пароль, введенный пользователем, и длину строки введенного пароля, длина STRING всегда получается равной 21, в моем случае, и вывод пароля представляет собой комбинацию пароля, введенногопользователь и имя пользователя ...... что происходит ??????

#include<iostream.h>
#include<conio.h>
#include<string.h>
int main()
{
    char username[15],password[15];
    int i=0;
    cout<<"\nEnter your USERNAME:";
    cin>>username;
    cout<<"\nenter your password:";

    do 
    {
        password[i]=getch();


        if(password[i]=='!')break;
        cout<<"*";
        i++;
    }while(i<15);
    cout<<"\n\nthe password entered was"<<password<<"\nthe length of the password is"           <<strlen(password);
    getch();
    return 0;
} 

Ответы [ 5 ]

2 голосов
/ 29 июля 2011

Вы определили:

char password[15];

И в соответствии с вашим циклом оно продолжается до тех пор, пока i не станет равным 14 (т. Е. 15-й символ ).Таким образом, нет места для NULL-завершения .Пусть будет так:

char password[16];

Теперь, сразу после цикла, добавьте:

password[i] = 0;

i будет в 15, если пользователь не вошел '!'и если он это сделал, он будет заменен на NULL символ.Я думаю, что это самое простое решение.Если вы не хотите '!'подлежит замене, поместите i++; перед break;

1 голос
/ 29 июля 2011

Вы читаете 15 символов, но никогда не пишете '\ 0' в строке, поэтому она не заканчивается.

1 голос
/ 29 июля 2011

Вы не завершаете свою строку с NULL.

do 
{
    password[i]=getch();
    if(password[i]=='!') break;
    cout<<"*";-
    i++;
}while(i<15);
if (i < 15) password[i] = '\0';
1 голос
/ 29 июля 2011

Строка C должна заканчиваться специальным символом '\0', что не относится к вашему паролю / имени пользователя. Вы должны установить i+1 th символ '\0':

password[i]=getch();
password[i+1] = '\0';

Также вы должны учитывать, что ваш буфер паролей должен также содержать эту строку, поэтому у вас есть только место для 14 символов, если вы определите char password[15];, чтобы ваш цикл мог просто перейти к 14.

0 голосов
/ 29 июля 2011

Это

#include <iostream>
#include <string>

Пожалуйста, исправьте это.Если ваш компилятор не знает этих файлов, то ваш компилятор не годится.

Тогда почему бы вам не использовать вместо этого std :: string, если char-arrays?
Это позволит избежать любого из этихошибки.То, что вы делаете здесь, представляет собой смесь c и c ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...