• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed gwiazdkowanie znaków w haśle

Object Storage Arubacloud
0 głosów
241 wizyt
pytanie zadane 11 listopada 2022 w C i C++ przez piotr_domanski Bywalec (2,080 p.)
zamknięte 12 listopada 2022 przez piotr_domanski

Witam, napisałem funkcję, która zamienia litery na gwiazdki tak jest jest w haśle. 

Mam następujący problem, gdy naciskam backspace to wtedy pojawia się gwiazdka. Jak temu zapobiec. Powinna znikać. 

EDIT, mam nowy kod.

Tylko w nim jest inny problem. Gdy naciskam bacspace to wtedy w haśle znak znika tylko gwiazdka z konsoli nie znika. :(

kod

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

using namespace std;

int main()
{
   int i;
   string kod;
   string kod2 = "marcin";
   char c;
   const char ENTER = 13;
   const char BACKSPACE = 8;


   while(true)
   {
      kod.clear();
      i = 0;
      cout << "Podaj haslo: " << endl;

      while(true)
      {
         c = getch();
         if (c == ENTER) break;
         if(c == BACKSPACE)
         {
            if(!kod.empty()) kod.erase(kod.length() - 1);
         }
         else
         {
            cout << "*";
            kod.append(1, c);
         }
      }

      cout << "\nPodane haslo: " << kod << endl;
      cout << "Poprawne haslo: " << kod2 << endl;

      if (kod == kod2)
      {
         cout << "\nHaslo jest poprawne\n";
         break;
      }
      else cout << "\nHaslo jest bledne\n";
      continue;
   }
   system("Pause");
   return 0;
}

 

komentarz zamknięcia: uzyskana odp
komentarz 11 listopada 2022 przez VBService Ekspert (253,340 p.)

1 odpowiedź

+2 głosów
odpowiedź 11 listopada 2022 przez toko Dyskutant (7,670 p.)
wybrane 11 listopada 2022 przez piotr_domanski
 
Najlepsza

Nigdzie nie usuwasz gwiazdki, tylko znak ze stringa kod. Możesz dodać w linii 30. w ifie cout << "\b \b";. '\b' to znak kontrolny, który cofa kursor o jeden znak w lewo (ale nie usuwa znaku tak jak to robi zazwyczaj backspace). Musisz potem wypisać spację, żeby "zmazać" gwiazdkę z konsoli i z powrotem cofnąć kursor, żeby następna gwiazdka była w dobrym miejscu (bez odstępu).

         if(c == BACKSPACE)
         {
            if(!kod.empty()) {
                kod.erase(kod.length() - 1);
                cout << "\b \b";
            }
         }
         else
         {
            cout << "*";
            kod.append(1, c);
         }

 

komentarz 11 listopada 2022 przez piotr_domanski Bywalec (2,080 p.)
działa bardzo dziękuję :)

Podobne pytania

0 głosów
1 odpowiedź 84 wizyt
0 głosów
2 odpowiedzi 123 wizyt
pytanie zadane 15 kwietnia 2016 w Java przez Aisekai Nałogowiec (42,190 p.)
+1 głos
1 odpowiedź 162 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...