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

Pomoc w analizie kodu #tablice#zapisywanie i odczytywanie z pliku txt

Ostatnio zmodyfikowano 2016-04-10 19:44
Autor Wiadomość
Damian155
Temat założony przez niniejszego użytkownika
Pomoc w analizie kodu #tablice#zapisywanie i odczytywanie z pliku txt
» 2016-04-10 18:58:10
Witam!!!
Robię prosty program polegający na rejestracji haseł w pliku a następnie możliwości się z niego zalogowania Tu wstawiam mój kod:
C/C++
#include <iostream>
#include<fstream>
#include <ctime>
#include <windows.h>
int main()
{
    int wybor;
    int licznik = 3;
    std::fstream passy;
    std::string loginy[ 10 ];
    std::string hasla[ 10 ];
    std::string login, haslo;
    std::string nowy_login, nowe_haslo;
    std::cout << "=====================================================                                                  ===============" << std::endl;
    std::cout << "Witaj w przechowywalni hasel!!!"; std::cout << "                                                                        WERSJA:ALPHA 01" << std::endl;
    std::cout << "=====================================================                                                  ===============" << std::endl;
    std::cout << "Menu glowne" << std::endl;
    std::cout << "1.Aby utworzyc nowe konto" << std::endl;
    std::cout << "2.Aby zaalogowac sie na istniejace konto" << std::endl;
    std::cout << "=====================================================" << std::endl;
    std::cout << "Twoj wybor:";
    std::cin >> wybor;
    switch( wybor )
    {
    case 1:
        {
            system( "cls" );
            std::cout << "Rejestracja" << std::endl;
            std::cout << "===========" << std::endl;
            std::cout << "Wpisz login:";
            std::cin >> nowy_login;
            std::cout << "Wpisz haslo:";
            std::cin >> nowe_haslo;
           
            passy.open( "passy.txt", std::ios::out | std::ios::app );
            passy << nowy_login << std::endl;
            passy << nowe_haslo << std::endl;
            passy.close();
            passy.clear();
           
            system( "cls" );
            std::cout << "Inicjalizacja";
            do
            {
                std::cout << ".";
                licznik--;
                Sleep( 1000 );
            } while( licznik != 0 );
           
            if( passy.good() == true )
            {
                system( "cls" );
                std::cout << "Udalo sie zarejestrowac!!!" << std::endl;
                std::cout << "Logowanie mozliwe po ponownym uruchomieniu programu" << std::endl;
                system( "pause" );
            } else
            {
                std::cout << "Cos poszlo nie tak!!!Spobuj ponownie za jakis czas" << std::endl;
                system( "pause" );
            }
        } break;
    case 2:
        {
            system( "cls" );
            std::cout << "Logowanie" << std::endl;
            std::cout << "=========" << std::endl;
            std::cout << "Wpisz login:"; std::cin >> login;
            std::cout << "Wpisz haslo:"; std::cin >> haslo;
            licznik = 3;
            system( "cls" );
            std::cout << "Inicjalizacja";
           
            do
            {
                std::cout << ".";
                licznik--;
                Sleep( 1000 );
            } while( licznik != 0 );
           
            passy.open( "passy.txt", std::ios::in );
            if( passy.good() == false )
            {
                std::cout << "Cos poszlo nie tak, sprobuj pozniej lub skontaktuj sie z dystrybutorem";
                system( "pasue" );
            }
            std::string linia;
            int nr_linii = 1;
            while( getline( passy, linia ) )
            {
                switch( nr_linii )
                {
                case 1: loginy[ 0 ] = linia;
                    std::cout << "login" << loginy[ 0 ] << std::endl;
                    break;
                case 2: hasla[ 0 ] = linia;
                    std::cout << "haslo" << hasla[ 0 ] << std::endl;
                    break;
                case 3: loginy[ 1 ] = linia;
                    std::cout << "login" << loginy[ 1 ] << std::endl;
                    break;
                case 4: hasla[ 1 ] = linia;
                    std::cout << "haslo" << hasla[ 1 ] << std::endl;
                    break;
                case 5: loginy[ 2 ] = linia;
                    std::cout << "login" << loginy[ 2 ] << std::endl;
                    break;
                case 6: hasla[ 2 ] = linia;
                    std::cout << "haslo" << hasla[ 2 ] << std::endl;
                    break;
                case 7: loginy[ 3 ] = linia;
                    std::cout << "login" << loginy[ 3 ] << std::endl;
                    break;
                case 8: hasla[ 3 ] = linia;
                    std::cout << "haslo" << hasla[ 3 ] << std::endl;
                    break;
                case 9: loginy[ 4 ] = linia;
                    std::cout << "login" << loginy[ 4 ] << std::endl;
                    break;
                case 10: hasla[ 4 ] = linia;
                    std::cout << "haslo" << hasla[ 4 ] << std::endl;
                    break;
                case 11: loginy[ 5 ] = linia;
                    std::cout << "login" << loginy[ 5 ] << std::endl;
                    break;
                case 12: hasla[ 5 ] = linia;
                    std::cout << "haslo" << hasla[ 5 ] << std::endl;
                    break;
                case 13: loginy[ 6 ] = linia;
                    std::cout << "login" << loginy[ 6 ] << std::endl;
                    break;
                case 14: hasla[ 6 ] = linia;
                    std::cout << "haslo" << hasla[ 6 ] << std::endl;
                    break;
                case 15: loginy[ 7 ] = linia;
                    std::cout << "login" << loginy[ 7 ] << std::endl;
                    break;
                case 16: hasla[ 7 ] = linia;
                    std::cout << "haslo" << hasla[ 7 ] << std::endl;
                    break;
                case 17: loginy[ 8 ] = linia;
                    std::cout << "login" << loginy[ 8 ] << std::endl;
                    break;
                case 18: hasla[ 8 ] = linia;
                    std::cout << "haslo" << hasla[ 8 ] << std::endl;
                    break;
                case 19: loginy[ 9 ] = linia;
                    std::cout << "login" << loginy[ 9 ] << std::endl;
                    break;
                case 20: hasla[ 9 ] = linia;
                    std::cout << "haslo" << hasla[ 9 ] << std::endl;
                    break;
                }
                nr_linii++;
            }
            if( login == loginy[ 0 - 9 ] && haslo == hasla[ 0 - 9 ] )
            {
                std::cout << "Brawo";
            }
        } break;
        default:
        {
            std::cout << "Nic nie wybrano";
        }
    }
   
}
Dosyć to długie ale chodzi mi o to: Program kompiluje się bez żadnych problemów ale po wczytaniu wywala do pulpitu tak jakbym źle użył tablicy, to znaczy w tym przypadku dla 10 loginów wpisał loginy[10]. Sprawdzałem ale tak nie jest, pomoże ktoś bo nie wiem co może być źle
P-147162
mateczek
» 2016-04-10 19:15:24
C/C++
if( login == loginy[ 0 - 9 ] && haslo == hasla[ 0 - 9 ] )
{
    std::cout << "Brawo";
}


login == loginy[ 0 - 9 ] // co to jest ?? 0-9 ?? co to ma robić ??

ta pętla while z tymi casami to też jakieś dziwne !!!
masz tablice 10 elementową to przejedź ją forem

C/C++
for( int i = 0; i < 10; i++ ) {
    if( getline( passy, linia ) ) break; // gdy plik się skończy np .
   
    loginy[ i ] = linia;
    if( getline( passy, linia ) ) break;
   
    hasla[ i ] = linia
   
}
P-147164
Damian155
Temat założony przez niniejszego użytkownika
» 2016-04-10 19:20:40
Miało to sygnalizować programowi aby z czytywał z loginów od 0 do 9 a skoro kompilacja przeszła bez problemu to myślałem że jest to dobrze :P Wiesz może jak to można inaczej zapisać ale żeby to działało ?
P-147165
mateczek
» 2016-04-10 19:31:49
kompilacja przeszła bez problemu a próba odczytania tablicy o indeksie (-9) już nie koniecznie :P
C/C++
//zazmiast tej pętli while z 18 casami możesz np :
bool loged = false;

for( int i = 0; i < 10; i++ ) {
    string log, pass;
    if( !getline( passy, log ) ) break; // gdy plik się skończy np .
   
    if( !getline( passy, pass ) ) break;
   
    if( log == login && pass == password ) { loged = true; break; }
    if( log == login && pass != password ) { cout << "zle haslo!!!"; break; }
}
P-147167
Damian155
Temat założony przez niniejszego użytkownika
» 2016-04-10 19:44:59
Ok popróbuje ale już nie dzisiaj :) Zmęczony jestem. A i tego wyświetlania docelowo też nie będzie, to tak na testy także zapis i tak sie nieco skróci
P-147168
« 1 »
  Strona 1 z 1