Pytanie. problem. mała pomoc

0

Witam, jestem początkującym programistą(jeśli można to nazwać programowaniem). Zaczynałem od prostych rzeczy aż wymyśliłem coś nowego. Zawsze miałem problem z hasłami, co by nie było musiałem szperać w zeszytach, szukać kartek albo po notatnikach szukać. Pomyślałem że po wpisaniu np;
PKO
Może się wyświetlić hasło i dane logowania do Banku. I zrobić kilka takich opcji. Po 2 dniach kombinowania i szperania wreszcie wymyśliłem jednak nie jest to o co mi chodzi do końca. Chciałbym aby po wyświetleniu hasła(i naciśnięciu ENTER) Program wyczyścił tablicę, i znowu wyświetlił Opcje wraz z możliwością wybrania. Jeśli program jest pokomplikowany to przepraszam, jednak jak mówiłem dopiero się uczę i jest to 1 projekt stworzony w 100% przez mnie.
Prosiłbym o wasze rady, pomysły, lub inne fajerwerki :D
Oto kod:

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

 using namespace std;

 int main()
 {
    string Dane;
    {
    string Dane;
     cout << "cos1" << endl;
     cout << "cos2" << endl;
     cout << "cos3" << endl;
     cout << "cos4" << endl;
     cout << "cos5" << endl;
     cout << "Wyjscie" << endl;
     cout << "Wybierz:";
     cin >> Dane;

        if (Dane == "cos1")
            std::cout << "oto haslo1" << endl;
        if (Dane == "COS1")
            std::cout << "oto haslo1" << endl;
        if (Dane == "cos2")
            std::cout << "oto haslo2" << endl;
        if (Dane == "COS2")
            std::cout << "oto haslo2" << endl;
        if (Dane == "cos3")
            std::cout << "oto haslo3" << endl;
        if (Dane == "COS3")
            std::cout << "oto haslo3" << endl;
        if (Dane == "cos4")
            std::cout << "oto haslo4" << endl;
        if (Dane == "COS4")
            std::cout << "oto haslo4" << endl;
        if (Dane == "cos5")
            std::cout << "oto haslo5" << endl;
        if (Dane == "COS5")
            std::cout << "oto haslo5" << endl;
        if (Dane == "wyjscie")
            cout << "Wyjscie z programu" << endl;
        }
  while(Dane == "wyjscie");   getch();
     return 0;
 }

Pozdrawiam i liczę na szybką odpowiedź z waszej strony ;)

1

Skorzystaj z mapy:

#include<iostream>
#include<map>
#include<string>
using namespace std;

enum class subject
{
    bank,
    email
};

int main()
{
    map<subject,string> passwords;
    passwords[subject::bank] = "my secret password to bank";
    passwords[subject::email] = "my secret password to email";

    cout << passwords[subject::bank] << endl;

    return 0;
}

Naturalnie nie muszę wspominać, że przechowywanie haseł w ten sposób nie jest bezpieczne. W ramach ćwiczeń możesz się pobawić ale z realnymi hasłami lepiej tak nie eksperymentować i przechowywać je np. w zaszyfrowanym pliku. Programów do szyfrowania trochę jest.

0

Niestety, po wklepaniu tego kodu do mojego code::block'a (Bo z niego korzystam) wyświetlił mi 3 błędy w "komendzie" subject.
error: "subject" is not class or namespace.

0

Dodaj do wiersz poleceń kompilatora -std=c++11 lub dodaj standard ISO C++11 w ustawieniach kompilatora

user image

user image

0

Albo możesz przerobić grzecha przykład na:

#include<iostream>
#include<map>
#include<string>
using namespace std;


enum subject{
    bank,
    email
};

int main()
{
    map<subject,string> passwords;
    passwords[bank] = "my secret password to bank";
    passwords[email] = "my secret password to email";

    cout << passwords[bank] << endl;

    return 0;
} 
0

Hmm... Przeanalizowałem wszystkie wasze pomysły i rady i z przykrością muszę stwierdzić że chyba nie o to do końca mi chodziło..
Program miał się pytać użytkownika jakie dane logowania mu podać, po wpisaniu np "Pko" przez użytkownika, program wyświetlał te dane po czym czyścił tablicę i znowu wyświetlał menu. Wiem... Wiem... Trochę dziwne, ale jednak zostanę przy pierwotnym pomyśle. Jeśli chodzi o wasze pomysły to nie są one złe. Jednak prosiłbym o jakieś rady, pomysły jak napisać kod do programu tego, który mam w głowie(czyli ten opisany wyżej) :)

0

jak napisać kod do programu tego, który mam w głowie

Jeśli wymyślisz auto na kwadratowych kołach, nie możesz liczyć, że drogowcy dorobią ci drogę "schody".

0

Chciałbym aby po wyświetleniu hasła(i naciśnięciu ENTER) Program wyczyścił tablicę, i znowu wyświetlił Opcje wraz z możliwością wybrania
Co rozumiesz przez czyszczenie tablicy?

Aby wrócić do wyświetlania menu po prostu wyświetlaj je w pętli dopóki użytkownik nie wybierze zakończenia działania programu.

0

No właśnie w tym jest problem...
Kod który napisałem chyba nie nadaje się, dlatego przyszedłem tutaj z prośbą pomocy.

0

Pokombinowałem trochę i znalazłem ciekawe rozwiązanie które okazuje się że działa.

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

 using namespace std;
 int Dane; int Pytanie;
 int main()




{

    string Pytanie, Dane;

    do {
     cout <<"PAMIETAJ ABY WSZYSTKIE LITERY PISAC MALA LITERA!" << endl;
     cout << "1. COS" << endl;
     cout << "2. COS" << endl;
     cout << "3. COS" << endl;
     cout << "4. COS" << endl;
     cout << "5. COS" << endl;
     cout << "6. Wyjscie" << endl;
     cout << "Wybierz:";
     cin >> Dane;

        if (Dane == "cos1")
            std::cout << "oto haslo1" << endl;
        if (Dane == "cos2")
            std::cout << "oto haslo2" << endl;
        if (Dane == "cos3")
            std::cout << "oto haslo3" << endl;
        if (Dane == "cos4")
            std::cout << "oto haslo4" << endl;
        if (Dane == "cos5")
            std::cout << "oto haslo5" << endl;
        if (Dane == "wyjscie")
            cout << "Wyjscie z programu" << endl;

        if(Dane == "wyjscie");
        getch();
         {
            cout <<"Czy chcesz powtorzyc program?:" << endl;
            cout <<"1. TAK" << endl;
            cout <<"2. NIE" << endl;
            cin  >> Pytanie;

             if (Pytanie == "nie"); getch();
             if (Pytanie == "tak")
                cout <<" NACISNIJ ENTER" <<endl;
                system("cls");
         }

      }while(Pytanie == "tak");


return 0;
 }

Wyraźcie swoją opinię względem tego kodu, czy jest on dobry.. co powinienem zmienić a co zostawić :D
Jeszcze mam problem z ENTEREM. A mianowicie trzeba 2 razy kliknąć żeby np: Program mnie zapytał czy chce powtórzyć...
Ma ktoś jakieś rady?

0

Jeszcze mam problem z ENTEREM. A mianowicie trzeba 2 razy kliknąć

Masz wstawiony getch(), dwa razy. Chyba nie rozumiesz swojego kodu.

0

Wyjaśnij ze szczegółami co tu się dzieje:

        if(Dane == "wyjscie");
        getch();
         {
            cout <<"Czy chcesz powtorzyc program?:" << endl;
            cout <<"1. TAK" << endl;
            cout <<"2. NIE" << endl;
            cin  >> Pytanie;
 
             if (Pytanie == "nie"); getch();
             if (Pytanie == "tak")
                cout <<" NACISNIJ ENTER" <<endl;
                system("cls");
         }

Poza tym - pozbyłbym się tych <conio.h>, getch()y i system().
using wstawiłbym w lokalny zasięg funkcji, a jeszcze lepiej ograniczył się do paru nazw - choć tutaj to nie ma większego znaczenia.
Niepotrzebne zmienne globalne: int Dane; int Pytanie; których nazwy i tak przykrywasz później lokalnymi.
No i pozbyłbym się fetyszu z endl. "costam\n" i tak szybciej napiszesz - nie wspominając, że endl nie tylko dodaje znak nowej linii do strumienia, ale też sprawia, że strumień woła output_stream.flush() co może spowodować problemy z wydajnością. Nie w tym przypadku, oczywiście, ale lepiej od początku zapamiętać, że endl powinno się używać tylko gdy chcemy dodać nową linię oraz zflushować strumień.

0
carlosmay napisał(a):

Jeszcze mam problem z ENTEREM. A mianowicie trzeba 2 razy kliknąć

Masz wstawiony getch(), dwa razy. Chyba nie rozumiesz swojego kodu.

ou.... Nie zauważyłem... poprawione ;)
Co rozumiesz poprzesz nie rozumienie swojego kodu?

0
Xupicor napisał(a):

Wyjaśnij ze szczegółami co tu się dzieje:

        if(Dane == "wyjscie");
        getch();
         {
            cout <<"Czy chcesz powtorzyc program?:" << endl;
            cout <<"1. TAK" << endl;
            cout <<"2. NIE" << endl;
            cin  >> Pytanie;
 
             if (Pytanie == "nie"); getch();
             if (Pytanie == "tak")
                cout <<" NACISNIJ ENTER" <<endl;
                system("cls");
         }

Poza tym - pozbyłbym się tych <conio.h>, getch()y i system().
using wstawiłbym w lokalny zasięg funkcji, a jeszcze lepiej ograniczył się do paru nazw - choć tutaj to nie ma większego znaczenia.
Niepotrzebne zmienne globalne: int Dane; int Pytanie; których nazwy i tak przykrywasz później lokalnymi.
No i pozbyłbym się fetyszu z endl. "costam\n" i tak szybciej napiszesz - nie wspominając, że endl nie tylko dodaje znak nowej linii do strumienia, ale też sprawia, że strumień woła output_stream.flush() co może spowodować problemy z wydajnością. Nie w tym przypadku, oczywiście, ale lepiej od początku zapamiętać, że endl powinno się używać tylko gdy chcemy dodać nową linię oraz zflushować strumień.

Dziękuje za rady, przeanalizuje je i postaram się do nich zastosować.
Jednak tak jak mówię jestem w tym temacie dosyć nowy, i chyba rzuciłem się od razu na głęboką wodę ;) Ale na spokojnie jakoś ogarnę ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1