Wielokrotne używanie jednej zmiennej z "do while"

0

Dzień dobry, wpadłem na pomysł napisania prostego programu, który ma na celu zapamiętanie danych kilku użytkowników, a następnie wyświetlenie ich pełnych danych na podstawie jednej z nich np. pesel.


#include <iostream>

using namespace std;

int main(int argc, char** argv) {
	
	cout << "Dzien dobry." << endl;
	
	string NRTEL;
	string pesel;
	string calosc;
	string dane;
	string firstName;
	string lastName;
	string PESEL;
	string nrtel;
	int wybor;
	bool nieZamykac = true;
	if( nieZamykac = false)
	{
		exit ( 1 );
	}
	
	
	do
	{
	cout << "1. Dodaj uzytkownika" << endl;
	cout << "2. Wyswietl uzytkownikow" << endl;
	cout << "3. Znajdz po numerze PESEL" << endl;
	cout << "4. Znajdz po numerze tel." << endl;
	cout << "5. Wyjscie" << endl;
    cin >> wybor;
    
    switch(wybor)
    {
    	case 1:
    		system("cls");
    		cout << "Podaj imie uzytkownika: " << endl;
    		cin >> firstName;
    		system("cls");
    		cout << "Podaj nazwisko uzytkownika: " << endl;
    		cin >> lastName;
    		system("cls");
    		cout << "Podaj numer PESEL uzytkownika: " << endl;
    		cin >> PESEL;
    		system("cls");
    		cout << "Podaj numer telefonu uzytkownika: " << endl;
    	    cin >> nrtel;
    		system ("cls");
    		dane = firstName + " " + lastName + " PESEL: " + PESEL + " Nr Telefonu: " + nrtel + "\n";
    		cout << dane << endl;
    		cout << "" << endl;
    		cout << "" << endl;
    		calosc = calosc + dane;
    		break;
		case 2:
		    system("cls");
			cout << calosc << endl;
			cout << "" << endl;
			cout << "" << endl;
			break;
		case 3:
		    system("cls");
			cout << "Podaj PESEL w celu znalezienia uzytkownika: " << endl;
			cin >> pesel;
			system("cls");
			if( pesel == PESEL )
			{
				cout << dane << endl;
				cout << "" << endl;
				cout << "" << endl;
			}
			else if( pesel != PESEL )
			{
				cout << "Nie znaleziono uzytkownika." << endl;
				cout << "" << endl;
				cout << "" << endl;
			}
			
				break;
		case 4:
			system("cls");
			cout << "Podaj nr. telefonu w celu znalezienia uzytkownika: " << endl;
			cin >> NRTEL;
			system("cls");
			if( NRTEL == nrtel )
			{
				cout << dane << endl;
				cout << "" << endl;
				cout << "" << endl;
			}
			else if( NRTEL != nrtel )
			{
				cout << "Nie znaleziono uzytkownika." << endl;
				cout << "" << endl;
				cout << "" << endl;
			}
			
				break;
		case 5:
			exit ( 1 );
	}
} while( nieZamykac = true); 
	
	
	return 0;
}

Gdy uruchomię program i próbuję wyszukać użytkownika za pomocą numeru telefonu lub peselu, to komputer bierze pod uwagę jedynie ostatniego wpisanego użytkownika. Prosiłbym o pomoc.

3

stwórz klasę uzytkownik z odpowiednimi polami oraz vector<uzytkownik> uzytkownicy;

2

Pojedyncze = we while albo if jest poważnym błędem, to jest PODSTAWIENIE, które jak zwykle w C ma wartość, gdy jest użyte w kontekście wymagającym wartości.

Prawie na pewno masz na ten temat ostrzeżenie kompilatora

1

Z tym = to masz rację ciągle nie mogę zapamiętać, że gdy nie podstawiam to daje podwójny znak równości. Ale ostrzeżenia kompilatora na ten temat nie mam. Jeszcze raz dzięki. — stefanz dziś, 16:21

Nie myśl o zagadnieniu w sposób "gdy nie podstawiam". Opisywanie rzeczywistości przez "nie" się nie sprawdza, to tak jakbyś pisał o kolorze "nie żóltym" * )
Myśl przez definizje pozytywne "kiedy porównuję daję == ".

A dokładnie to nie piszemy (nawet z podwójnym ==)
} while( nieZamykac == true);

tylko

} while( nieZamykac ); 

*) choć wielu ludzi definiuje siebie przez wrogów, jakich posiada "anty liberał" "anty faszysta", "anty lewicowiec". Mocno krucha definicja, choć niestety łatwa.

2

Jak na początkującego program jest całkiem ok, jednak parę rzeczy zrobiłeś Bracie nie najszczęśliwiej:

    bool nieZamykac = true;
    if( nieZamykac = false)
    {
        exit ( 1 );
    }

w tymże ifie są 2 błędy. W C/C++ zapytanie o równość robi się operatorem ==, ten którego użyłeś to przypisanie wartości. Inna sprawa to to, iż ów if jest kompletnie zbyteczny skoro linijkę wyżej inicjalizujesz zmienną na true - czyżbyś się spodziewał, iż magicznie przestawi się na false?

Druga sprawa, to switch (wybor) - co się stanie w sytuacji jak złośliwy użytkownik jako opcję da np. 'z'? Lipa będzie...na szczęście, na ten problem poradzi sekcja default na samym dole switcha:

switch (wybor)
{
//te twoje case'y 1-4
     case 5:
     default:
        exit(1);
}

I na koniec, pętla do/while. Zwróć uwagę, iż z tej pętli nie ma de facto wyjścia bo nigdzie nie zmieniasz wartości zmiennej nieZamykac. Jest to jak najbardziej ok, tyle iż w takiej sytuacji wskazane jest zapisać pętlę w taki sposób:

do
{
//ciało pętli
}
while (true);//taki sposób zapisu jednoznacznie wskazuje na nieskończoną pętlę, z której wychodzi się w specjalny sposób
1

Zastanów się nad tym:
https://4programmers.net/Forum/C_i_C++/352675-stos_funkcje_zapisu_i_odczytu_pliku_binarnego?p=1772198#id1772198
Program stanie się prostszy, krótszy a najważniejsze że skalowalny!

1

Staram się dzielić program na funkcje lub klasy. Pisać krótki funkcje i krótkie klasy z jedną odpowiedzialnością
Polecam przeczytać książkę Uncle Boba - Czysty kod

Staraj się nie wywoływać poleceń systemowych na Windowsie jest polecenie:

#include <conio.h>
clrscr();

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