Proszę o znalezienie błędu w kodzie - Listy STL c++

0

Proszę o pomoc w znalezieniu błędu w kodzie.
Coś musi być chyba nie tak z dodawaniem nowego elementu listy

#include<list>
#include "Pracownik.cpp"
#include <conio.h>
void czysc_ekran(int x,int y)
{
    for(int i=y;i<50;i++)
    {
        for(int j=x;j<x+50;j++)
        {
            gotoxy(j,i);
            cout<<" ";
        }
    }
}
void wyswietl_pracownikow(list<Pracownik*>pr,int x,int y)
{
    char znak;
    int z=y;
    list<Pracownik*>::iterator it=pr.begin();
        if(it==pr.end())return;
        do
        {
            gotoxy(x,z++);cout<<"Przewijaj strzalkami. Backspace konczy przegladanie";
            gotoxy(x,z++);cout<<"Imie: "<<(*it)->getImie();
            gotoxy(x,z++);cout<<"Nazwisko: "<<(*it)->getNazwisko();
            gotoxy(x,z++);cout<<"Stanowisko/Dzial: "<<(*it)->getStanowisko();
            znak = getch();
            if(znak==80) it++;
            else if(znak==72)
            {
                if(it==pr.begin())
                {
                    it=pr.end();
                    it--;
                }
                else it--;
            }
            if(it == pr.end()) it=pr.begin();
        }while(znak!=13);
        getch();
}
void usun_pracownika(list<Pracownik*>pr,int x,int y)
{
    string imie,nazwisko,dzial;
    gotoxy(x,y);
    cout<<"Podaj imie pracownika do usuniecia: ";
    cin>>imie;
    gotoxy(x,y+1);
    cout<<"Podaj nazwisko pracownika do usuniecia: ";
    cin>>nazwisko;
    gotoxy(x,y+2);
    cout<<"Podaj stanowisko/dzial pracownika do usuniecia: ";
    cin>>dzial;
    for(list<Pracownik*>::iterator it=pr.begin();it!=pr.end();it++)
    {
        if((*it)->getImie()==imie&&(*it)->getNazwisko()==nazwisko&&(*it)->getStanowisko()==dzial)
        {
            pr.erase(it);
        }
    }
}
void wykonaj_dzialanie(int pozycja_menu,list<Pracownik*>pr)
{
    int x=25;
    if(pozycja_menu==0)
                {
                    pr.push_back(new Pracownik(30,0));
                    czysc_ekran(30,0);
                }
                if(pozycja_menu==1)
                {
                    usun_pracownika(pr,30,0);
                    czysc_ekran(30,0);
                    ///usunPracownika
                }
                if(pozycja_menu==2)
                {
                    ///sortujPracownikow
                }
                if(pozycja_menu==3)
                {
                    wyswietl_pracownikow(pr,30,0);
                    czysc_ekran(30,0);
                    ///wyswietlPracownikow
                }
                if(pozycja_menu==4)
                {
                    ///wyliczPensjePracownika
                }
}
2

Dokładnie ten sam problem co w kodzie poniżej:

void foo(int value)
  {
   value=666;
  }

int main()
  {
   int x=13;
   foo(x);
   cout<<"x="<<x<<"; czemu ten x wciaz ma wartosc 13?"<<endl;
   return 0;
  }

Oprócz tego:

  1. Nie używaj polskich nazw
  2. Nie używaj i++ http://4programmers.net/Forum/1101404
  3. Przyda ci się to: http://4programmers.net/Forum/1100492
0

Dzięki za ten kod. Przydał się i to bardzo. Użyłem referencji do listy i działa.
Ale czemu mam nie używać polskich nazw? Jak na razie nie znam angielskiego. Nie cierpię tego języka.

7
void wypolni(unsigned nomer,list<Rаbotnik*> &ro)
  {
   switch(nomer)
     {
      case 0: ro.push_back(new Rаbotnik(30,0)); break;
      case 1: udali_rаbotnika(ro,30,0); break;
      case 2: rаbotniki_po_alfawitu(ro); break;
      case 3: pokazhi_rаbotnikow(ro,30,0); break;
      case 4: poschitaj_zarplatu_rаbotnikam(ro); break;
     }
   pustoj_ekran(30,0);
  }

A teraz rozumiesz czemu?

0

po jakiemu to jest napisane.

3

Jaka ci różnica, grunt że nie masz zielonego pojęcia co to i z czym to się je.
A to akurat zoptymalizowana wersja twego wykonaj_dzialanie() oraz dobry przykład czemu nie używać nazewnictwa polskiego.

0
adrian.lodz napisał(a):

po jakiemu to jest napisane.

@_13th_Dragon -- rosyjski tylko łacinką? :) W niektórych językach można by i cyrylicą. :) Ale powinno być w takim razie zaplatu (bez r) i wszędzie rabotnik -- bo przez a piszemy... :)

0
#include <conio.h>
void czysc_ekran(int x,int y)
{
    for(int i=y;i<50;i++)
    {
        for(int j=x;j<x+50;j++)
        {
            gotoxy(j,i);
            cout<<" ";
        }
    }
}

Jak już używasz conio.h, to się go naucz.
Tam jest wszelkie możliwe czyszczenie.

jest też właściwe dla tego środowiska spójne drukowanie

nawiasem mówiąc, myślałem, że to naście lat temu umarło.

(mieszanie funkcji z poziomu BIOS, bo takimi są conio.h, ze strumieniami (nadbudowa nad plikami) wróży jak najgorzej)

_13th_Dragon napisał(a):

Jaka ci różnica, grunt że nie masz zielonego pojęcia co to i z czym to się je.

Dokładnie

0
AnyKtokolwiek napisał(a): w komentarzu
@Azarien: i output przez WInAPI stał się spójny z outputem przez pliki ? — AnyKtokolwiek 12 minut temu

Tak dokładnie:
```cpp
#include <iostream>
#include <windows.h>
using namespace std;


void gotoxy(SHORT X,SHORT Y)
{
	static HANDLE hout=GetStdHandle(STD_OUTPUT_HANDLE);
	COORD coord {X,Y};
	SetConsoleCursorPosition(hout,coord);
}

int main()
{
	for(int i=0;i<10;++i)
	{
		gotoxy(i,i);
		cout<<"ABC";
	}
	return 0;
}

output:

ABC
 ABC
  ABC
   ABC
    ABC
     ABC
      ABC
       ABC
        ABC
         ABC

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