Problem z instrukcją warunkową if

0

Witam, mam problem z programem. Wydaje mi się że błąd tkwi gdzieś w menu.
Po kliknięciu 9 nic się nie dzieje, nie mogę zlokalizować zródła problemu.
Mam świadomość że kod nie jest ani dobry ani wspaniały. Dopiero się uczę.

#include <iostream>
#include <cstdlib>
#include <regex>
#include <fstream>
using namespace std;

int z=0;

struct tab
{
    string   imie, nazwisko, miejscowosc, kod_pocztowy, ulica, nr_domu, nr_mieszkania, pesel, nr_telefonu, stan_konta;
    bool o=false;
};
tab tablica[1000];

fstream plik;
regex aimie("[A-Z]{1}[a-z]{2,19}");
regex anazwisko("[A-Z]{1}[a-z]{1,19}");
regex amiejscowosc("[A-Z]{1}[a-z]{2,39}");
regex akod_pocztowy("[0-9]{2}-[0-9]{3}");
regex aulica("[A-Za-z0-9\\s\\-]{3,40}");
regex anr_domu("[1-9]{1}[A-Za-z1-9]{1,3}");
regex anr_mieszkania("[1-9]{1,3}");
regex apesel("[0-9]{11}");
regex anr_telefonu("[0-9]{9}");
regex astan_konta("[0-9]{1,}\\,[0-9]{1,3}");

bool bimie;
bool bnazwisko;
bool bmiejscowosc;
bool bkod_pocztowy;
bool bulica;
bool bnr_domu;
bool bnr_mieszkania;
bool bpesel;
bool bnr_telefonu;
bool bstan_konta;

void funkcja_zapisanie()
{


for(z=0; z<=1000; z++)
{
    if(tablica[z].o==true)
    {
        plik<<tablica[z].imie<<endl;
        plik<<tablica[z].nazwisko<<endl;
        plik<<tablica[z].miejscowosc<<endl;
        plik<<tablica[z].ulica<<endl;
        plik<<tablica[z].kod_pocztowy<<endl;
        plik<<tablica[z].nr_mieszkania<<endl;
        plik<<tablica[z].nr_domu<<endl;
        plik<<tablica[z].pesel<<endl;
        plik<<tablica[z].nr_telefonu<<endl;
        plik<<tablica[z].stan_konta<<endl;
        plik<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
    }
        else
        break;
}
}
void funkcja_wyjscie()
{
    exit(0);
}
void funkcja_odlaczanie()
{
}

void funkcja_wpisywanie()
{
    for(int x=1; x<=10; x++)
{   tablica[z].o==true;
//////////////////////////////////////////////////////////////////////
 if(x==1)
    {
    cout << "Podaj imie: ";
           getline(cin,tablica[z].imie);

    bimie=regex_match(tablica[z].imie, aimie);

    if(bimie==false)
    {
        cout << "Blad" <<endl;

        x--;
    }
    else
        x++;
    }
////////////////////////////////////////////////////////////////////////

   if(x==2)
    {
    cout << "Podaj nazwisko: ";
           getline(cin,tablica[z].nazwisko);

    bnazwisko=regex_match(tablica[z].nazwisko, anazwisko);

    if(bnazwisko==false)
    {
        cout << "Blad" <<endl;
        x--;
    }
    else
        x++;
    }

////////////////////////////////////////////////////
  if(x==3)
    {
    cout << "Podaj miejscowosc: ";
           getline(cin,tablica[z].miejscowosc);

    bmiejscowosc=regex_match(tablica[z].miejscowosc, amiejscowosc);

    if(bmiejscowosc==false)
    {
        cout << "Blad" <<endl;
        x--;
    }
    else
        x++;
    }
///////////////////////////////////////////////////////
if(x==4)
    {
    cout << "Podaj kod pocztowy: ";
           getline(cin,tablica[z].kod_pocztowy);

    bkod_pocztowy=regex_match(tablica[z].kod_pocztowy, akod_pocztowy);

    if(bkod_pocztowy==false)
    {
        cout << "Blad" <<endl;
        x--;
    }
    else
        x++;
    }
////////////////////////////////////////////////////

 if(x==5)
    {
    cout << "Podaj ulice: ";
           getline(cin,tablica[z].ulica);

    bulica=regex_match(tablica[z].ulica, aulica);

    if(bulica==false)
    {
        cout << "Blad" <<endl;
        x--;
    }
    else
        x++;
    }
///////////////////////////////////////////////////
if(x==6)
    {
    cout << "Podaj nr domu: ";
           getline(cin,tablica[z].nr_domu);

    bnr_domu=regex_match(tablica[z].nr_domu, anr_domu);

    if(bnr_domu==false)
    {
        cout << "Blad" <<endl;
        x--;
    }
    else
        x++;
    }
//////////////////////////////////////////////////////////////////////
if(x==7)
    {
    cout << "Podaj numer mieszkania: ";
           getline(cin,tablica[z].nr_mieszkania);

    bnr_mieszkania=regex_match(tablica[z].nr_mieszkania, anr_mieszkania);

    if(bnr_mieszkania==false)
    {
        cout << "Blad" <<endl;
        x--;
    }
    else
        x++;
    }
//////////////////////////////////////////////////////////
if(x==8)
    {
    cout << "Podaj pesel: ";
           getline(cin,tablica[z].pesel);

    bpesel=regex_match(tablica[z].pesel, apesel);

    if(bpesel==false)
    {
        cout << "Blad" <<endl;
        x--;
    }
    else
        x++;
    }
///////////////////////////////////////////////////////////
if(x==9)
    {
    cout << "Podaj numer telefon: ";
           getline(cin,tablica[z].nr_telefonu);

    bnr_telefonu=regex_match(tablica[z].nr_telefonu, anr_telefonu);

    if(bnr_telefonu==false)
    {
        cout << "Blad" <<endl;
        x--;
    }
    else
        x++;
    }
//////////////////////////////////////////////////////////////////////////
if(x==10)
    {
    cout << "Podaj stan konta: ";
           getline(cin,tablica[z].stan_konta);

    bstan_konta=regex_match(tablica[z].stan_konta, astan_konta);

    if(bstan_konta==false)
    {
        cout << "Blad" <<endl;
        x--;
    }
    else
        x++;
    }
z++;
}
}
void funkcja_usuwanie()
{
}
void funkcja_zmiana()
{
}
void funkcja_wyszukiwanie()
{
}
void funkcja_wyswietlanie()
{

          for(z=0; z<=1000;z++)
    {
        if(tablica[z].o==true)
        {
        cout<<"Imie:"   <<tablica[z].imie<<endl;
         cout<<"Nazwisko:"   <<tablica[z].nazwisko<<endl;
          cout<<"Miejscowosc:"   <<tablica[z].miejscowosc<<endl;
           cout<<"Ulica:"   <<tablica[z].ulica<<endl;
            cout<<"Kod_pocztowy:"   <<tablica[z].kod_pocztowy<<endl;
             cout<<"Numer mieszkania:"   <<tablica[z].nr_mieszkania<<endl;
              cout<<"Numer domu:"   <<tablica[z].nr_domu<<endl;
               cout<<"Pesel:"   <<tablica[z].pesel<<endl;
                cout<<"Numer telefonu:"   <<tablica[z].nr_telefonu<<endl;
                 cout<<"Stan konta:"   <<tablica[z].stan_konta<<endl;
                 cout <<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" << endl;
        }
        else
        break;
    }
}
void funkcja_zaladowanie()
{
    string nazwa_bazy;
    cout << "Podaj nazwe bazy: ";
    cin >> nazwa_bazy;
    nazwa_bazy += ".txt";
    plik.open( nazwa_bazy.c_str(),ios::in );

    if( !plik.good() )
{
    cout << "Nie udalo sie zaladowac bazy danych" << endl;
    funkcja_zaladowanie();
}
else
{
    cout << "Udalo sie zaladowac baze danch" << endl;
}
}
void funkcja_menu()
{
    cout << "[1]Zaladowanie bazy danych z pliku do pamieci" << endl;
    cout << "[2]Zapisanie zmian"<< endl;
    cout << "[3]Wyjscie z programu"<< endl;
    cout << "[4]Odlaczenie pliku bazy danych"<< endl;
    cout << "[5]Dodanie uzytkownika do bazy"<< endl;
    cout << "[6]Usuniecie uzytkownika z bazy"<< endl;
    cout << "[7]Zmiane danych uzytkownika"<< endl;
    cout << "[8]Wyszukiwanie uzytkownikow wedlug kryteriow"<< endl;
    cout << "[9]Przegadanie uzytkownikow jeden po drugim" << endl;
}
int main()
{

funkcja_zaladowanie()

     int liczba;

           for(;;)
        {
            funkcja_menu();

            cin >> liczba;
            if(liczba==1)
            {
                funkcja_zaladowanie();
                continue;
            }
            else if(liczba==2)
            {
                funkcja_zapisanie();
                continue;
            }
            else if(liczba==3)
            {
                funkcja_wyjscie();
                continue;
            }
            else if(liczba==4)
            {
                funkcja_odlaczanie();
                continue;
            }
            else if (liczba==5)
            {
                funkcja_wpisywanie();
                continue;

            }
            else if(liczba==6)
            {
                funkcja_usuwanie();
                continue;
            }
            else if(liczba==7)
            {
                funkcja_zmiana();
                continue;
            }
            else if(liczba==8)
            {
                funkcja_wyszukiwanie();
                continue;
            }
            else if(liczba==9)
            {
                funkcja_wyswietlanie();
                continue;
            }

        }
}

1

1. Funkcja funkcja_wyswietlanie zawiera niepotrzebny break wykonywany jako alternatywa wyświetlenia użytkownika. Usuń to i wtedy sprawdź.
2. Wpisywany nowy użytkownik jest z pominięciem pierwszego, w linijce: for(int x=1; x<=10; x++)
3. Cały ten kod pełen jest dziwnych warunków, które łatwiej byłoby Ci naprawić, gdybyś potrafił debugować swój kod.

0

Najprościej: w funkcja_wpisywanie jest tablica[z].o==true; zamiast tablica[z].o=true;. Pomijając inne błędy...

1

https://4programmers.net/Forum/C_i_C++/351664-zapis_i_odczyt_z_plikow
Wszystko co napisano w powyższym linku dotyczy również twego kodu.

Przemyśl całość, zobacz powtórzone prawe wszystko co w twoim kodzie ale prościej:

#include <iostream>
#include <fstream>
#include <vector>
#include <regex>
using namespace std;

struct FieldData
{
	string name;
	regex reg;
};

const FieldData TableData[]=
{
		{"imie",regex("[A-Z]{1}[a-z]{2,19}")},
		{"nazwisko",regex("[A-Z]{1}[a-z]{1,19}")},
		{"miejscowosc",regex("[A-Z]{1}[a-z]{2,39}")},
		{"kod pocztowy",regex("[0-9]{2}-[0-9]{3}")},
		{"ulica",regex("[A-Za-z0-9\\s\\-]{3,40}")},
		{"nr domu",regex("[1-9]{1}[A-Za-z1-9]{1,3}")},
		{"nr mieszkania",regex("[1-9]{1,3}")},
		{"pesel",regex("[0-9]{11}")},
		{"nr telefonu",regex("[0-9]{9}")},
		{"stan konta",regex("[0-9]{1,}\\,[0-9]{1,3}")},
};
const int FieldsCount=sizeof(TableData)/sizeof(*TableData);

struct RecordData
{
	string fields[FieldsCount];
};

void writeRecord(ofstream &file,RecordData &rec)
{
	for(int i=0;i<FieldsCount;++i) file<<rec.fields[i]<<endl;
}

void writeTable(ofstream &file,vector<RecordData> &table)
{
	for(int i=0;i<table.size();++i) writeRecord(file,table[i]);
}

bool readRecord(ifstream &file,RecordData &rec)
{
	for(int i=0;i<FieldsCount;++i) if(!getline(file,rec.fields[i])) return false;
	return true;
}

void readTable(ifstream &file,vector<RecordData> &table)
{
	for(RecordData rec;readRecord(file,rec);) table.push_back(rec);
}

bool inputRecord(RecordData &rec)
{
	for(int i=0;i<FieldsCount;++i)
	{
		cout<<"Podaj "<<TableData[i].name<<":";
		getline(cin,rec.fields[i]);
		if(!regex_match(rec.fields[i],TableData[i].reg)) return false;		
	}
	return true;
}

bool appendTable(vector<RecordData> &table)
{
	RecordData rec;
	bool ok=inputRecord(rec);
	if(ok) table.push_back(rec);
	return ok;
}

void showRecord(RecordData &rec)
{
	for(int i=0;i<FieldsCount;++i)
	{
		cout<<TableData[i].name<<": "<<rec.fields[i]<<endl;
	}
}

int main()
{
	vector<RecordData> table;
	return 0;
}

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