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

System ("cls") co w nim takiego złego?

Ostatnio zmodyfikowano 2014-03-04 13:56
Autor Wiadomość
fajdek21
Temat założony przez niniejszego użytkownika
» 2014-02-18 20:11:43
Tam nic o tym nie pisze.
P-104918
oputyk
» 2014-02-18 20:35:46
Jak to nie pisze?
Na szybko napisane:
C/C++
while( true )
{
    clock_t cl;
    cl = clock();
    std::cout << cl << std::endl;
}
P-104925
fajdek21
Temat założony przez niniejszego użytkownika
» 2014-02-18 20:52:28
Nie wiedziałem ale już znalazłem na to sposób i za niedługo wstawie mój kalkulator.
P-104930
janek2012
» 2014-03-04 13:56:23
Co jest złego w:
system( "cls" );
?

Otóż zacznijmy od samego
system()
 - podstawowa rzecz to to, że jeśli masz program, w którym nie masz konsoli (bo jest okienkowy albo ją sobie zamknąłeś/ukryłeś, a może przechwyciłeś inną konsolę?), to otworzy Ci się nowe okno z poleceniem, które wywołujesz i co najważniejsze - zamknie się po wywołaniu tej funkcji, a więc pisząc kilka poleceń pod sobą otworzy ci się kilka okien konsoli jedna po drugim. No cóż - nie tego się spodziewaliśmy.
Po drugie, jeżeli projektujemy aplikację konsolową, to głównie po to, aby uruchamiać ją z konsoli, czyż nie?
Jeżeli wywołujemy sobie kilka komend z konsoli, np. pod Windows polecenie
DIR
 aby zorientować się w strukturze katalogu, następnie wywołamy sobie nasz program (np. gra w statki)
STATKI.EXE
, a w nim mamy
system( "cls" );
, to ku naszemu nieszczęściu, po wyjściu z programu zgubimy wszystko, co mieliśmy wcześniej w konsoli. Może i nie ma tragedii, ale znowu trzeba np. wywołać
DIR
, aby zobaczyć co też mieliśmy jeszcze w tym folderze ;)
Ale jak usuwać zawartość konsoli tylko na czas działania programu?
Rozwiązania są dwa: zachować treść konsoli sprzed uruchomienia programu i przywrócić ją przy wyjściu albo użyć stosownej biblioteki.
Pod linuxem mamy do dyspozycji potężną ncurses, która działa w dużym uproszczeniu podobnie jak Windowsowe "okienka" - mamy tzw. "screeny", które nakładają się na to, co było na konsoli i możemy bez problemu je czyścić, a po ich zamknięciu odsłonią to, co było pod nimi.
» KursyKurs New Curses, C++ kurs
Pod Windows nie ma lekko, ale są odpowiednie podobne biblioteki, np.:
http:/​/pdcurses.sourceforge.net/ - uniwersalny
http://www.projectpluto.com​/win32a.htm - pod Win32

A poza tym,
system();
 jest "be" :)

Niestety, nie miałem do czynienia z tymi bibliotekami, ale jedynie z ncurses na linux.
Mam nadzieję, że wytłumaczyłem to zrozumiale.

PS. Może perspektywa użycia dodatkowej biblioteki wygląda to przerażająco, ale naprawdę nie ma się czego bać, a proste przykłady z dokumentacji powinny Ci pomóc w zrozumieniu działania i implementacji ;)
P-105602
1 « 2 »
Poprzednia strona Strona 2 z 2