Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Wyświetlaj ile razy przeszła pętla 'for' dopóki hasło jest złe.

Ostatnio zmodyfikowano 2016-01-03 00:54
Autor Wiadomość
Green_Arrow
Temat założony przez niniejszego użytkownika
[C++] Wyświetlaj ile razy przeszła pętla 'for' dopóki hasło jest złe.
» 2016-01-02 20:32:16
Witam.

Napisałem prosty program, ale chcę dodać do niego zadanie. Mianowicie chcę aby program po wpisaniu złego hasła wyświetlił w pętli informację który raz próbujemy wpisać hasło, a następnie wrócił do poprzedniej funkcji programu - pobierającej hasło. Jeżeli napisałem niezrozumiale, spójrzcie na kod a załapiecie o co chodzi :D

C/C++
#include <iostream>

using namespace std;

void logowanie();
void odrzucanie();
void pobierz_pin();

int main()
{
    cout << "######################### ZGADNIJ HASŁO #########################" << endl << endl;
    pobierz_pin();
    cout << endl << "############################# KONIEC #############################" << endl << endl << endl;
}

void pobierz_pin()
{
    int pin;
    cout << "Podaj 4 cyfrowe haslo: ";
    cin >> pin;
    if( pin == 1234 ) logowanie();
    else
    {
        std::cin.clear();
        std::cin.ignore( 1000, '\n' );
        odrzucanie();
    }
}

void logowanie()
{
    cout << "Laczenie z baza danych.." << " [OK]" << endl;
    cout << "Dopasowywanie kryteriow hasla.." << " [OK]" << endl << "Weryfikacja: ";
    for( int i = 1; i < 101; i = i + 1 )
    {
        cout << " " << i << "%";
    }
    cout << " [OK]" << endl;
    cout << endl << "Zalogowano poprawnie !" << " [OK]" << endl;
}

void odrzucanie()
{
    for(;; ) // co tutaj wpisac? :D
    {
        cout << "[ERROR] Wpisales bledne haslo po raz: " << i << endl << endl; // tutaj ma byc petla ktora liczy ile razy wpisalem zle haslo  :)
    }
    pobierz_pin();
}
Pozdrawiam.
P-142729
carlosmay
» 2016-01-02 20:38:50
Zadeklaruj zmienną, którą będziesz przekazywać między funkcjami przez referencje i w razie potrzeby powiększał.
P-142731
Razner
» 2016-01-02 21:18:47
Przydała by się pętla do..while W miejscu sprawdzania poprawności pinu.
P-142738
Green_Arrow
Temat założony przez niniejszego użytkownika
» 2016-01-02 21:30:09
Coś nie mogę z tą referencją. Kompilator cały czas pluje błędami

C/C++
#include <iostream>

using namespace std;

void logowanie();
void odrzucanie();
void pobierz_pin();

int main()
{
    cout << "######################### ZŁAM HASŁO #########################" << endl << endl;
    pobierz_pin();
    cout << endl << "############################# KONIEC #############################" << endl << endl << endl;
}

void pobierz_pin( int y )
{
    int y = 0;
    int pin;
    cout << "Podaj 4 cyfrowe haslo: ";
    cin >> pin;
    if( pin == 1234 ) logowanie();
    else
    {
        std::cin.clear();
        std::cin.ignore( 1000, '\n' );
        odrzucanie( y );
    }
}

void logowanie()
{
    cout << "Laczenie z baza danych.." << " [OK]" << endl;
    cout << "Dopasowywanie kryteriow hasla.." << " [OK]" << endl << "Weryfikacja: ";
    for( int i = 1; i < 101; i = i + 1 )
    {
        cout << " " << i << "%";
    }
    cout << " [OK]" << endl;
    cout << endl << "Zalogowano poprawnie !" << " [OK]" << endl;
}

void odrzucanie( int c )
{
    cout << "[ERROR] Wpisales bledne haslo po raz: " << c << endl << endl;
    c = c++;
    pobierz_pin( c );
}
P-142739
Razner
» 2016-01-02 21:33:13
void odrzucanie( int & c ) - to jest referencja :)
i na górze w deklaracji funkcji void odrzucanie dodaj int & w nawiasie :)
Plus do tego musisz jeszcze zadeklarować globalnie lub w main y :)
P-142740
Green_Arrow
Temat założony przez niniejszego użytkownika
» 2016-01-02 22:16:24
Po godzinnym boju z kodem udało mi się wyskrobać coś takiego:
Kod kompiluje się, lecz nie wiem w którym miejscu dać inkrementacje więc ciągle wyświetla 0 zamiast dodawać +1. Możesz pomóc? :)
C/C++
#include <iostream>

using namespace std;

void logowanie();
void odrzucanie( int & y );
void pobierz_pin();

int main()
{
    cout << "######################### ZGADNIJ HASŁO #########################" << endl << endl;
    pobierz_pin();
    cout << endl << "############################# KONIEC #############################" << endl << endl << endl;
}

void pobierz_pin()
{
    int pin, x = 0;
    x = x++;
    cout << "Podaj 4 cyfrowe haslo: ";
    cin >> pin;
    if( pin == 1234 ) logowanie();
    else
    {
        std::cin.clear();
        std::cin.ignore( 1000, '\n' );
        odrzucanie( x );
    }
}

void logowanie()
{
    cout << "Laczenie z baza danych.." << " [OK]" << endl;
    cout << "Dopasowywanie kryteriow hasla.." << " [OK]" << endl << "Weryfikacja: ";
    for( int i = 1; i < 101; i = i + 1 )
    {
        cout << " " << i << "%";
    }
    cout << " [OK]" << endl;
    cout << endl << "Zalogowano poprawnie !" << " [OK]" << endl;
}


void odrzucanie( int & y )
{
    cout << "[ERROR] Wpisales bledne haslo po raz: " << y << endl << endl;
    pobierz_pin();
}
P-142745
Razner
» 2016-01-02 22:23:05
Inkrementacja musi być w odrzucanie ale samą zmienna zadeklaruj w funkcji main bo za każdym razem jak wywołujesz funkcje  w której zadeklarowałeś X liczba na nowo przybiera wartość 0.
Nie zapomnij o referencji.
P-142746
Green_Arrow
Temat założony przez niniejszego użytkownika
» 2016-01-02 22:39:05
Kiedy umieszcze zmienną int x = 0; w main() kompilator sypie błędami że nie jest zadeklarowana w funkcji pobierz_pin()

haslo.cpp: In function ‘void pobierz_pin()’:
haslo.cpp:26:13: error: ‘x’ was not declared in this scope odrzucanie(x);
P-142748
« 1 » 2
  Strona 1 z 2 Następna strona