C. Projekt, parę pytań.

0

1.Czego użyć zamiast system("cls");
aby:
po 1. Działało płynniej.
po 2. Działało zarówna na linux jak i windows.

2.Chciałbym aby program otwierał pliki z folderu który znajduje sie w tym samym miejscu co program.
Np. Program znajduje sie /Folder_programu/program.exe a dane dla programu w /Folder_programu/Dane/test.txt

Jak to zrobić?

0

ad. 1) @spartanPAGE popełnił taki artykuł Czyszczenie konsoli ;)

0

kropki a czy Ty przeczytales pytanie? chodzi zeby wlasnie tego nie uzywac...

a moze nie potrzebujesz czyscic ekranu? Moze wystarczy ze go zaktualizujesz? Albo przesuniesz tekst za pomoca nowych lini?

0
  1. To nie jest takie proste. Mógłbyś użyć ścieżek względnych, tzn po prostu otwierać pliki o lokalizacji "Dane/test.txt", ale to korzysta z CWD, więc jak ktoś odpali twój program z innej lokalizacji to nie zadziała. Tzn jak ktoś odpali twój program z konsoli na zasadzie
    /cośstam/cośtam/cośtam/program.exe
    to niestety ale CWD będzie wskazywać na katalog w którym ktoś był wklepując to polecenie a nie na katalog programu.
0
..... napisał(a):

ad. 1) kropki a czy Ty przeczytales pytanie? chodzi zeby wlasnie tego nie uzywac...

a moze nie potrzebujesz czyscic ekranu? Moze wystarczy ze go zaktualizujesz? Albo przesuniesz tekst za pomoca nowych lini?

tzn projekt polega na napisaniu systemu rejestrującego czas jaki student przeznaczyl na naukę ;p. Potrzebne mi to jest do przechodzenia do kolejnych "menu".
Tak jakby Otwiera sie program, tam mamy do wyboru 1.Logowanie 2.Pomoc 3.Statystki 4.Wyjscie wchodzac do logowania wybieramy użytkownika a następnie przechodzimy do wyboru czynności itd itd. Tylko nie wiem nigdy ile będzie danych wyświetlone tzn wiem ale ich ilosc jest zmienna.

0

Dostałeś już poprawną odpowiedź od @karolinaa - użyj ncurses - to biblioteka przenośna.

0
Shalom napisał(a):
  1. To nie jest takie proste. Mógłbyś użyć ścieżek względnych, tzn po prostu otwierać pliki o lokalizacji "Dane/test.txt", ale to korzysta z CWD, więc jak ktoś odpali twój program z innej lokalizacji to nie zadziała. Tzn jak ktoś odpali twój program z konsoli na zasadzie
    /cośstam/cośtam/cośtam/program.exe
    to niestety ale CWD będzie wskazywać na katalog w którym ktoś był wklepując to polecenie a nie na katalog programu.

To już wiem czemu nie działało jak uruchamiałem projekt przez C::B ^^. Bo właśnie próbowałem z ścieżkami względnymi.

Tzn miałbym jeszcze taki pomysł aby napisać funkcje która tworzy plik z adresem do niego. tzn w jednym folderze mialbym program.exe i adres.txt i w adres.txt byl by adres do adres.txt : np: "C:/Folder_Programu/adres.txt" i teraz pobieram ten napis przycinam go "C:/Folder_Programu/" i lacze z "dane/dane.txt". Tylko jeszcze potrzebuje funkcji która, zwróci mi tablicę charów z adresem adres.txt ;p Jest coś takiego ?

0

Pod windowsami to się nazywa "Utwórz skrót".

0

Nie zawsze jest możliwość używania zewnętrznych bibliotek typu ncurses - dlatego piszę to1

Potrzebujesz klasy bazowej z tym, co dla Ciebie najważniejsze - pozycja oraz metoda do odświeżania.

typedef struct{
    void(*Repaint)(void *);
    int X, Y;
}  Component;

void *new_Component(int x, int y){
    Component *this = malloc(sizeof(Component));
    this->X = x;
    this->Y = y;
    return this;
}
void delete_Component(Component *this){
    free(this);
}

Przykładowy komponent będzie wyglądać tak:

typedef struct{
    Component *Base;
    const char *Text;
} Label;
void Label_Repaint(void *voidthis){
    Label *this = voidthis;
    Component *base = this->Base;
    printf("Label \"%s\" at {%d, %d}", this->Text, base->X, base->Y);
}
void *new_Label(int x, int y, const char *text){
    Label *this = malloc(sizeof(Label));
    this->Base = new_Component(x, y);
    this->Base->Repaint = Label_Repaint;
    this->Text = text;
    return this;
}
void delete_Label(Label *this){
    delete_Component(this->Base);
    free(this);
}

(http://ideone.com/s4SU03)

Co nas interesuje, to metoda Label_Repaint - musi być:

  • wywołana w odpowiednim momencie (gdy zmienia się coś na ekranie)

  • przystosowana do twojego GUI

    Kroki w niej powinny wyglądać następująco:

Jedź kursorem w położenie komponentu
zamaluj odpowiednią długość tak, by nie było nic widać
Jedź kursorem w położenie komponentu
wypisz Text

Według schematu możesz stworzyć combobox oraz resztę potrzebnych komponentów

1 - Tak naprawdę napisałem to, bo chciałem zobaczyć jak się ma obiektowość w C :P

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