Mirki-programiści, pytanie do was. Podany niżej przykład (zamysł) programu jest tylko obrazem problemu, jego rozwiązanie jest potrzebne mi do nieco większego projektu. Otóż, mamy program w #cpp który wyświetla liczby od 1 do 99 jedna pod drugą - zatem w jednej kolumnie. Chcę rozdzielić te liczby na trzy kolumny obok siebie (pierwsza: liczby 1-33, druga: 34-66, trzecia: 67-99). Powtarzam, ten program to tylko TŁO do rozwiązania problemu z brakiem możliwości powrotu "w górę". Jak to zrobić, jak sprawić by odbył się powrót na samą górę konsoli? #naukaprogramowania #programowanie #programista15k
@tagtak: no bo \r wraca ci na początek linii, w której jesteś
Przeczytaj sobie ten artykuł na wiki, albo jak ci się nie chce, to wpisz
std::cout << "\033[0;0H"; To ci wróci na górę, ale obecnej pozycji (czyli nie uwzględniając tego, że możesz mieć coś wyżej zeskrolowane). Możliwe, że jest kod, który ci wróci na górę uwzględniając scroll, ale wtedy się musisz wysilić i jednak przeczytać ten artykuł, który ci
@tagtak: zatem twój terminal nie obsługuje powszechnego standardu, wnioskuję więc, że twoim największym błędem jest używanie Windowsa do programowania w C++. Możesz to rozwiązać w następujący sposób (od najlepszego do najgorszego):
1. kupić maca 2. zainstalować se linuksa 3. postawić wirtualkę z linuksem 4. zabić się 5. użyć jakiegoś terminala na windowsie, który wspiera ANSI kody
@tagtak: np. wtyczka czy coś tam ANSICON do cmd.exe albo ten nowy windows terminal, którym microsofty się podniecają, że zrobili to, co na linuksie było 100 lat temu
@tagtak: Tego się tak nie robi. Po prostu generujesz sobie linie, np. 1 10 20 i ja wypisujesz, potem 2 11 21 i ja wypisujesz i tak dalej. Zabawy z lataniem kursorem są średnie, bo zależą od tego, jakiego terminala używasz.
@tagtak: stwórz sobie swój "wirtualny" terminal w postaci 2d tablicy charow/vectora stringów. skacz sobie po niej ile chcesz, a potem wpisz linia po linii jak będzie gotowe
@tagtak: pod windows wystarczy: https://superuser.com/a/1300251 i działają te same kody escape co na linuxie. Jeżeli chcesz mieć jeden codebase pod linuxa i windę użyj cygwina i ncurses.
@secret_passenger: fajnie że mnie wołasz ale to nie ja jestem OPem. A problem jest trochę bardziej skomplikowany - jak po fakcie narysowania czegoś na konsoli dodać coś w arbitralnym miejscu na ekranie powyżej aktualnej pozycji kursora bez uszkadzania istniejącej zawartości.
a co do rysowania - nie, problem nie jest skomplikowany i można go rozwiązać dokładnie tak jak opisałem wyżej. to jest tylko jednokrotne wypisanie listy tyle że w 3 kolumnach... co innego gdyby należało w ten sposób zrobić coś w rodzaju wyświetlania czasu, czy też procentowego progresu postępu jakiegoś zadania.
Otóż, mamy program w #cpp który wyświetla liczby od 1 do 99 jedna pod drugą - zatem w jednej kolumnie. Chcę rozdzielić te liczby na trzy kolumny obok siebie (pierwsza: liczby 1-33, druga: 34-66, trzecia: 67-99). Powtarzam, ten program to tylko TŁO do rozwiązania problemu z brakiem możliwości powrotu "w górę".
Jak to zrobić, jak sprawić by odbył się powrót na samą górę konsoli?
#naukaprogramowania #programowanie #programista15k
@tagtak: w sensie w celu dopisania kolejnej kolumny? Tego się tak nie robi
no ale jak już bardzo chcesz, to od p-----------a kursorem po terminalu (i nie tylko) masz ANSI kody
\rwraca ci na początek linii, w której jesteśPrzeczytaj sobie ten artykuł na wiki, albo jak ci się nie chce, to wpisz
std::cout << "\033[0;0H";To ci wróci na górę, ale obecnej pozycji (czyli nie uwzględniając tego, że możesz mieć coś wyżej zeskrolowane). Możliwe, że jest kod, który ci wróci na górę uwzględniając scroll, ale wtedy się musisz wysilić i jednak przeczytać ten artykuł, który ci
1. kupić maca
2. zainstalować se linuksa
3. postawić wirtualkę z linuksem
4. zabić się
5. użyć jakiegoś terminala na windowsie, który wspiera ANSI kody
te inne będą wyglądały tak:
1 34 67
2 35 68
3
a co do rysowania - nie, problem nie jest skomplikowany i można go rozwiązać dokładnie tak jak opisałem wyżej. to jest tylko jednokrotne wypisanie listy tyle że w 3 kolumnach...
co innego gdyby należało w ten sposób zrobić coś w rodzaju wyświetlania czasu, czy też procentowego progresu postępu jakiegoś zadania.
@tagtak spójrz na mój powyższy komentarz
Komentarz usunięty przez autora
void gotoxy ( short x, short y )
{
COORD coord = {x, y};
SetConsoleCursorPosition ( GetStdHandle ( STD OUTPUT HANDLE ),