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

Czyszczenie częśći ekranu

Ostatnio zmodyfikowano 2010-10-27 19:41
Autor Wiadomość
huberthx
Temat założony przez niniejszego użytkownika
Czyszczenie częśći ekranu
» 2010-10-26 22:11:23
Witam Mój problem polega na tymże nie wiem jak wyczyścić tylko część ekranu w aplikacji konsolowej.
Kod pochodzi z kursu c++.
C/C++
#include <time.h>
#include <iostream>

void czekaj( int sekundy )
{
    clock_t koniec_czekania;
    koniec_czekania = clock() + sekundy * CLOCKS_PER_SEC;
    while( clock() < koniec_czekania ) { }
}

int main()
{
    std::cout << "Program zamknie sie za:" << std::endl;
    for( int i = 5; i > 0; i-- ) {
        std::cout << i << std::endl;
        czekaj( 1 );
        // po tej operacji chcę aby i zastąpiło nowo wygenerowane i poprzez pętlę bo w programie jest tak że stare i zostaje na ekranie a pojawia się nowe
    }
    return 0;
}
Jeżeli nie obejdzie się bez jakiejś dodatkowej biblioteki to prosiłbym o to aby ta biblioteka była wspierana przez system linux ponieważ na nim programuję
Za pomoc dziękuję
P-23348
ison
» 2010-10-26 22:31:32
C/C++
for( int i = 5; i > 0; i-- ) {
    std::cout << i;
    czekaj( 1 );
    std::cout << "\r";
}
nie wiem jak to jest z linuxowym terminalem ale u mnie na windowsie śmiga jak należy
P-23349
huberthx
Temat założony przez niniejszego użytkownika
» 2010-10-26 23:04:23
Dziękuję za pomoc. Twój sposób jest dobry ale kod musiałem przerobić na taki żeby działał:
C/C++
#include <iostream>
#include <time.h>

void czekaj( int sekundy )
{
    clock_t koniec_czekania;
    koniec_czekania = clock() +( sekundy * CLOCKS_PER_SEC ) / 2;
    while( clock() < koniec_czekania ) { std::cout << "\r"; }
   
}

int main()
{
    std::cout << "Program zamknie sie za:" << std::endl;
    for( int i = 5; i > 0; i-- ) {
       
        std::cout << i;
        czekaj( 1 );
       
    }
    return 0;
}
Mimo rozwiązanie tego pojedynczego problemu prosiłbym, że jeśli zna ktoś jeszcze jakiś inny sposób czyszczenia części ekranu to prosiłbym o podanie.
P-23350
malan
» 2010-10-27 12:16:17
Ewentualnie możesz jeszcze zrobić tak:
C/C++
for( int i = 5; i > 0; i-- )
{
    ddt::console::clrsrc(); //Czyścimy ekran.
    //Odrysowujemy wszystko na nowo.
    std::cout << "Program zamknie sie za:" << std::endl;
    std::cout << i << std::endl;
    czekaj( 1 );
}
P-23358
ison
» 2010-10-27 16:13:38
@up powodzenia przy kompilacji programu z użyciem biblioteki windows.h na Linuksie :)

//edit apropo backspace'a teraz dopiero zauważyłem że machnąłem się w 1 znaku, \b a nie \r ;P
czyli tak powinien wyglądać kawałek kodu:
C/C++
for( int i = 5; i > 0; i-- ) {
    std::cout << i;
    czekaj( 1 );
    std::cout << "\b";
   
}
P-23367
malan
» 2010-10-27 19:41:22
Nie doczytałem, że kolega programuje na Linuksie. Jednak to żaden problem- Ncurses lub każda inna biblioteka wieloplatformowa posiadająca funkcję czyszczącą ekran konsoli.
Aczkolwiek Twoje rozwiązanie nie wymaga tyle zachodu.
P-23376
« 1 »
  Strona 1 z 1