6 / 6 / 0
Регистрация: 17.09.2011
Сообщений: 78
1

Написать программу, запрашивающую пароль у пользователя, чтобы при вводе пароля отображались звездочки

22.09.2011, 23:26. Показов 30049. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Я тут поискал в форуме и в гугл поискал. Но не нашел нужное. Может кто то знает как осуществить ввод пароля на С++ и сделать так чтобы при вводе пароля отображались звездочки...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.09.2011, 23:26
Ответы с готовыми решениями:

Написать программу, запрашивающую пароль пользователя (целое пятизначное число)
Плз :help::help: помагите мне решить эти задачки : (заранее огромное спасибо) :wall:1) Написать...

Как можно сделать так чтобы при вводе пароля в TextBox1-е появлялись звёздочки?
Уважаемые программеры я создал форму где вводится пароль в TextBox1-е, но пароль в нём видна. Как...

Подскажите как сделать чтобы при введении пароля отображались звёздачки а не сам пароль
Подскажите как сделать чтобы при введении пароля отображались звёздачки а не сам пароль <form...

Как при вводе вместо пароля отображать звёздочки?
Пишу окно авторизации у программы, на форму кинул виджет tkinter.Entry, это поле будет служить для...

17
-24 / 7 / 3
Регистрация: 06.04.2011
Сообщений: 85
22.09.2011, 23:50 2
вводить пароль в строку и сравнивать с другой строкой с помощью функции strcmp(строка1,строка2) сравнивает в лексикографическом порядке две строки и возвращает целое значение, зависящее следующим образом от результата сравнения: меньше нуля если str1 < str2, ноль если str1 == str2, больше нуля еслиstr1 > str2. Или делать сравнения самому с помощью условия
1
Эксперт GPSS
551 / 410 / 105
Регистрация: 02.07.2010
Сообщений: 1,716
23.09.2011, 00:01 3
в EditBox есть свойство такое называеться пароль, делаешь его True и все а сравнение строк это дело техники
1
-24 / 7 / 3
Регистрация: 06.04.2011
Сообщений: 85
23.09.2011, 00:08 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
using namespace std;
int main()
{
    setlocale(LC_ALL,"Rus");//Для руского текста если у вас Microsoft Visual Studio 
    char arr[50]="134679";   //Пароль134679
    char mas[50];        //Строка для ввода пароля
    cout<<"Введите пароль: ";
    cin>>mas;
    if(strcmp(arr,mas)==0) //Проверка если значение которое было возвращенно с функции равно 0 тогда 
        cout<<"Вы вошли в систему"<<endl; //Вывести сообшение
    else                    //Иначе
        cout<<"Пароль не правильный"<<endl; //Отказать в доступе
    return 0;
}
2
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
11885 / 7258 / 1720
Регистрация: 25.07.2009
Сообщений: 13,276
23.09.2011, 00:10 5
de_hack, http://msdn.microsoft.com/en-u... S.80).aspx _getch() если в винде, при чтении очередного символа выводить звёздочку...
0
934 / 759 / 299
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
23.09.2011, 01:04 6
de_hack, вот набросок только для Windows. :cofee:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <stdio.h>
#include <windows.h>
void  dlg_password(char* pasw);
 
int  main(void) {
   char buf[32];
   printf("enter password: ");
   dlg_password(buf);
 
   if(! stricmp(buf, "neo")) 
         puts("\n\nYES...");
   else
         printf("\n\nInvalid password: %s !!!", buf);
 
   getchar();
   return 0;
}
 
void  dlg_password(char* pasw) {
   KEY_EVENT_RECORD key;
   INPUT_RECORD input[128];
   DWORD dread, i, mode = 0u;
   HANDLE hin  = GetStdHandle(STD_INPUT_HANDLE);
 
   GetConsoleMode(hin, &mode);
   SetConsoleMode(hin, ENABLE_WINDOW_INPUT);
 
   while(1) {
        if(ReadConsoleInput(hin, input, 128, &dread)) {
               for(i = 0u; i < dread; i++) {
                   if(input[i].EventType == KEY_EVENT) {
                         key = input[i].Event.KeyEvent;
                         if(! key.bKeyDown) 
                                continue;
                          if(key.wVirtualKeyCode == VK_RETURN) {
                               *pasw = '\0';
                                goto _abort;    
                          } else if(key.wVirtualKeyCode == VK_BACK) 
                                continue; 
                             else {
                                *pasw++ = key.uChar.AsciiChar;
                                putchar('*');
                           }        
                     }
                }
          }
    }
_abort:
    SetConsoleMode(hin, mode);
}
2
6 / 6 / 0
Регистрация: 17.09.2011
Сообщений: 78
23.09.2011, 21:19  [ТС] 7
Спасибо всем, ребята...
0
2 / 2 / 0
Регистрация: 26.12.2015
Сообщений: 79
26.12.2015, 16:57 8
Цитата Сообщение от Sylvos Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
using namespace std;
int main()
{
    setlocale(LC_ALL,"Rus");//Для руского текста если у вас Microsoft Visual Studio 
    char arr[50]="134679";   //Пароль134679
    char mas[50];        //Строка для ввода пароля
    cout<<"Введите пароль: ";
    cin>>mas;
    if(strcmp(arr,mas)==0) //Проверка если значение которое было возвращенно с функции равно 0 тогда 
        cout<<"Вы вошли в систему"<<endl; //Вывести сообшение
    else                    //Иначе
        cout<<"Пароль не правильный"<<endl; //Отказать в доступе
    return 0;
}
А как сделать так чтоб пароль был текстовый и с несколькими значениями ?
0
GbaLog-
26.12.2015, 17:18
  #9

Не по теме:

Цитата Сообщение от de_hack Посмотреть сообщение
Я тут поискал в форуме и в гугл поискал. Но не нашел нужное.
Ой да ладно вам притворяться, внизу страницы хотя бы с десяток таких же тем.

0
28 / 36 / 6
Регистрация: 21.11.2017
Сообщений: 201
09.01.2018, 20:26 10
Цитата Сообщение от de_hack Посмотреть сообщение
как осуществить ввод пароля на С++ и сделать так чтобы при вводе пароля отображались звездочки...
Может уже поздно, но возможно кому нибудь пригодиться.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <iostream> 
#include <conio.h>
#include <string>
using namespace std;
 
int main()  
{
    string pass;
    cout << "Введите пароль:" <<endl;
    int ch = 0;               // Переменная для символа.
    while (true)                // Создание бесконечного цикла.
    {
          ch = _getch();        // Помещаем код нажатой клавиши в переменную.
          if (ch == 13)         // Установка Enter на прерывание цикла.
          {
                 break;         // Прерывание цикла.
          }
          if (ch == 27)   // Установка Esc на закрытие консоли.
          { 
                 exit (0);      // Выход из консоли.
          }
          if (ch == 8)     // Установка Backspace на удаление символов.
          {
                  
               cout << (char)8 << ' ' <<char(8);  
           /*Смещение курсора на одну позицию  в лево вывод пробела и 
           снова смещение курсора влево, то есть при нажатии Backspace 
           символ будет стираться, а курсор перемещаеться. */
               
               if (!pass.empty())
             /*Если строка pass не являеться пустой, то из неё 
             можно удалять  последний символ (Иначе закрывалась консоль.)*/
             
               pass.erase(pass.length()-1); 
               // позволяет удалить последний символ из строки pass
          }
         
          else                   
          { 
          cout << '*';            // Замена символов на *
          pass += (char)ch;       // Преврашение кода из целого числа в символ.
          }
    }          
        if(pass == "123456")           //Проверка пароля. (пароль 123456)
       {
    
       cout << "\nВы вошли в систему!!!" << '\n'; 
}
    else    
 {                      
        cout << "\nПароль не правильный!!!" << '\n'; 
}      
            
    system ("pause"); 
    return 0;
} 
/*
 
_getch();  Функция которые вводит данные через консоль, не 
отображает их на экранею Так как она вводит один символ то 
 исполюзуеться бесконечный цикл while (true).
 
 Удаляем символы.
 pass.erase(pass.length()-1). 
 Передаем в функцию pass.erase число на единицу меньше чем длина текущей строки.
Получение длины строки: pass.length().
Вычитание последнего символа из строки: -1 (Один символ одно нажатие клавиши).
 
pass += (char)ch; То же самое что и pass = pass + (char)ch;
 
Вместо << endl; можно использовать << '\n'; или cout << " ... \n";
 
 */
1
Эксперт С++
8724 / 4304 / 958
Регистрация: 15.11.2014
Сообщений: 9,751
09.01.2018, 21:13 11
Цитата Сообщение от de_hack Посмотреть сообщение
как осуществить ввод пароля на С++ и сделать так чтобы при вводе пароля отображались звездочки...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <iostream>
#include <cassert>
#include <locale>
#include <limits>
#include <string>
#include <sstream>
 
#include <conio.h>
 
 
void clear_input() noexcept
{
    std::cin.clear(),
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    assert(std::cin);
}
 
template<typename Data, class Checker> 
void input(const char* msg, const char* help, const Checker& checker, Data& dst, const bool check = true)
{
    for (;;)
    {
        assert(std::cout);
        std::cout << msg; 
        std::string accumulate;
        for (;;)
        {
            auto code = _getch();
            if (code == 13 || code == 27)
                break;
 
            if (code == 224)
                _getch(),
                code = 8;
                
            if(code == 8)
            {
                std::cout << "\b \b";
                if(!accumulate.empty())
                    accumulate.pop_back();
            }
            else
            {
                const auto ch = static_cast<char>(code);
                accumulate += ch;
                std::cout << "*";
            }
        }
 
        std::stringstream ss(accumulate);
        assert(ss);
        ss >> dst;
 
        const bool invalid = check && !ss;
        if (invalid || !checker(dst))
            std::cout << "\nerror: " << help;
        else
            break;
    }
}
 
template<typename Data> 
void input(const char* msg, const char* help, Data& dst, const bool check = true)
{ 
    const auto lambda = [](const Data&) { return true; };
    input(msg, help, lambda, dst, check);
}
 
 
int main(int argc, char* argv[])
{
    (void)argc;
    (void)argv;
    ::setlocale(LC_ALL, "");
 
    // допустим мы ожидаемы пароль:
    const char* expected_password = "123";
 
    // тогда валидатор введенного пароля имеет вид:
    const auto checker 
        = [expected_password](const std::string& value) 
        { return value == expected_password; };
 
    // в случае успеха 
    // результат ввода окажется в этой переменной:
    std::string result;
 
    input("\nenter password: ",
          "incorrect password!",
          checker,
          result
    );
 
    std::cout << "\naccess is allowed\n";
}
1
Mournful Max
10.01.2018, 00:18
  #12

Не по теме:

Цитата Сообщение от hoggy Посмотреть сообщение
C++
72
73
(void)argc;
(void)argv;
Это зачем?) Чтобы компилятор не ругался на неиспользованные переменные? :)

0
Эксперт С++
8724 / 4304 / 958
Регистрация: 15.11.2014
Сообщений: 9,751
10.01.2018, 01:16 13
Цитата Сообщение от Captain Maxee Посмотреть сообщение
Это зачем?) Чтобы компилятор не ругался на неиспользованные переменные?
ога
1
0 / 0 / 0
Регистрация: 23.10.2021
Сообщений: 4
17.12.2022, 16:40 14
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <iostream> 
#include <conio.h>
#include <string>
using namespace std;
 
int main()  
{
    string pass;
    cout << "Введите пароль:" ;
    int ch = 0;               // Переменная для символа.
    int checker=0;     //(*)Этого не хватало т.к. стирает всю строку если есть до этого Введите пароль:
    while (true)                // Создание бесконечного цикла.
    {
          ch = _getch();        // Помещаем код нажатой клавиши в переменную.
          if (ch == 13)         // Установка Enter на прерывание цикла.
          {
                 break;         // Прерывание цикла.
          }
          if (ch == 27)   // Установка Esc на закрытие консоли.
          { 
                 exit (0);      // Выход из консоли.
          }
          if (ch == 8)     // Установка Backspace на удаление символов.
          {
               if(checker>0)//(*)
           {   
               cout << (char)8 << ' ' <<char(8);  
           /*Смещение курсора на одну позицию  в лево вывод пробела и 
           снова смещение курсора влево, то есть при нажатии Backspace 
           символ будет стираться, а курсор перемещаеться. */
               
               if (!pass.empty())
             /*Если строка pass не являеться пустой, то из неё 
             можно удалять  последний символ (Иначе закрывалась консоль.)*/
             
               pass.erase(pass.length()-1); 
               // позволяет удалить последний символ из строки pass
               checker --;(*)
          }
}
         
          else                   
          { 
          cout << '*';            // Замена символов на *
          checker++;            //(*)
          pass += (char)ch;       // Превращение кода из целого числа в символ.
          }
    }          
        if(pass == "123456")           //Проверка пароля. (пароль 123456)
       {
    
       cout << "\nВы вошли в систему!!!" << '\n'; 
}
    else    
 {                      
        cout << "\nПароль не правильный!!!" << '\n'; 
}      
            
    system ("pause"); 
    return 0;
} 
/*
 
_getch();  Функция которые вводит данные через консоль, не 
отображает их на экранею Так как она вводит один символ то 
 исполюзуеться бесконечный цикл while (true).
 
 Удаляем символы.
 pass.erase(pass.length()-1). 
 Передаем в функцию pass.erase число на единицу меньше чем длина текущей строки.
Получение длины строки: pass.length().
Вычитание последнего символа из строки: -1 (Один символ одно нажатие клавиши).
 
pass += (char)ch; То же самое что и pass = pass + (char)ch;
 
Вместо << endl; можно использовать << '\n'; или cout << " ... \n";
 /*
 
//Изменения отмечены //(*)
Добавлено через 11 минут
0
Нарушитель
8586 / 4591 / 1058
Регистрация: 12.03.2015
Сообщений: 21,535
17.12.2022, 16:42 15
Цитата Сообщение от Be4rwar Посмотреть сообщение
После такого изменения можно убрать <<endl в 9 строке.
Ты зачем поднял тему 5-летней давности? Некрофил, штоли?
0
0 / 0 / 0
Регистрация: 23.10.2021
Сообщений: 4
17.12.2022, 16:50 16
Курсач потому что свой копаю
0
Нарушитель
8586 / 4591 / 1058
Регистрация: 12.03.2015
Сообщений: 21,535
17.12.2022, 17:02 17
Цитата Сообщение от Be4rwar Посмотреть сообщение
Курсач потому что свой копаю
Ну и как успехи?

0
0 / 0 / 0
Регистрация: 23.10.2021
Сообщений: 4
17.12.2022, 18:13 18
Ну как бы и хорошо, но и плохо, объем маленький остался ,но из-за моих костыльных методов тяжка, поэтому даже не знаю как-то... В понедельник нужно сдать(
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.12.2022, 18:13
Помогаю со студенческими работами здесь

Написать диалоговую программу, запрашивающую пароль
Необходимо написать программу диалога, например пароль.

Написать программу, запрашивающую дату рождения пользователя и выводящую поздравление, либо число дней до ДР
1. Напишите программу, которая запрашивает дату рождения пользователя и если день рождения в...

Написать программу, запрашивающую у пользователя строку и помещающую все слова с заданной длиной в файл
Написать программу, запрашивающую у пользователя строку и помещающую все слова с заданной длиной в...

Как реализовать проверку, при вводе пользователя и пароля, забитых в БД
Имеется БД в аксес с одной таблице (поля пользователь и поле пароль). На форме в шарпе, есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru