Pytanie. problem. mała pomoc

Pytanie. problem. mała pomoc
JA
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 6 lat
  • Postów:26
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:

Kopiuj
 
#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 ;)

edytowany 2x, ostatnio: kq
grzesiek51114
grzesiek51114
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 4 lata
  • Postów:2442
1

Skorzystaj z mapy:

Kopiuj
#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.

edytowany 1x, ostatnio: grzesiek51114
JA
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 6 lat
  • Postów:26
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.

grzesiek51114
grzesiek51114
Przesiądź się na coś lepszego i nowszego np. na QtCreator.
fasadin
@grzesiek51114 nie trzeba, pisalem na moim tutorialu jak wlaczyc C++14
amddell
  • Rejestracja:prawie 10 lat
  • Ostatnio:około 4 lata
  • Postów:21
0

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

user image

user image

Craith
co to za srodowisko?
0

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

Kopiuj
#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;
} 
JA
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 6 lat
  • Postów:26
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".

kaczus
bi jakto, przecież dzięki kwadratowym kołom, auto nie będzie nam zjeżdżać z górki, gdy będziemy chcieli jechać pod górkę :) (jeśli dobrze pamietam calość z rozwinięciem w Carry on Cleo :)
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:2 minuty
  • Lokalizacja:Szczecin
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.


edytowany 1x, ostatnio: kq
JA
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 6 lat
  • Postów:26
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.

JA
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 6 lat
  • Postów:26
0

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

Kopiuj
#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?

carlosmay
  • Rejestracja:prawie 9 lat
  • Ostatnio:około 5 lat
  • Lokalizacja:Pabianice
0

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

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


Xupicor
  • Rejestracja:ponad 16 lat
  • Ostatnio:ponad 8 lat
0

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

Kopiuj
        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ń.


JA
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 6 lat
  • Postów:26
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?

JA
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 6 lat
  • Postów:26
0
Xupicor napisał(a):

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

Kopiuj
        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ę ;)

Xupicor
Popatrz uważnie na ten kod, który zacytowałem. if (cond); znaczy tyle co "jeśli (cond) to nie rób nic specjalnego;", ten getch() jest już bezwarunkowy, a blok kodu za getchem to tylko nowy zasięg - nie ma nic wspólnego z tym ifem.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.