Pętla z ANSI
Ostatnio zmodyfikowano 2016-11-20 14:07
wokub Temat założony przez niniejszego użytkownika |
Pętla z ANSI » 2016-11-20 13:18:19 Witam ponownie. Mam zadanie, z którym mam pewien problem. Jest to ostatnie z pętli, więc niektórzy mogą odetchnąć. Mianowicie: Użyj pętli do sprawdzenia działania kolejnych kodów ANSI (cout do którego przekierowujemy licznik pętli). Zrobiłem taki szybki kod: #include <iostream> #include <windows.h> #define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
using namespace std;
int main() { HANDLE handle; handle = GetStdHandle( STD_OUTPUT_HANDLE ); DWORD dwMode = 0; GetConsoleMode( handle, & dwMode ); dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING; SetConsoleMode( handle, dwMode ); for( int i = 30; i <= 37; i++ ) { cout << "\x1b[31m" << i << endl; } for( int j = 40; j <= 47; j++ ) { cout << "\x1b[42m" << j << endl; } cin.get(); }
Wiem, ten długi kod wygląda nie za bardzo, no ale póki co działam na Windowsie, z którym są problemy jeśli chodzi o ANSI. Moje pytanie brzmi, czy jest możliwość, by zamiast liczby (przykładowo 44m) można było wstawić funkcję i? { cout << "\x1b[44m" << i << endl; }
np { cout << "\x1b[im" << i << endl; }
Aby wyświetliło nam wartość ,,i" we wszystkich wersjach ansi? Czy po prostu mam zły kod. Mógłbym to napisać łopatologiczne, ale to chyba nie o to tutaj chodzi. Z góry dzięki za pomoc. |
|
Monika90 |
» 2016-11-20 13:46:06 |
|
wokub Temat założony przez niniejszego użytkownika |
» 2016-11-20 13:53:37 Czyli nie da się tego umieścić w 2 funkcjach (i i j)? Muszę każdy kod ansi z osobna? |
|
Monika90 |
» 2016-11-20 13:56:56 wystarczy tak cout << "\x1b[" << i << "m" << i << endl;
Nie wiem co masz na myśli pisząc o funkcjach. |
|
wokub Temat założony przez niniejszego użytkownika |
» 2016-11-20 14:03:05 Ja czasem też nie wiem co mam na myśli. Póki co stworzyłem taki kod #include <iostream> #include <windows.h> #define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
using namespace std;
int main() { HANDLE handle; handle = GetStdHandle( STD_OUTPUT_HANDLE ); DWORD dwMode = 0; GetConsoleMode( handle, & dwMode ); dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING; SetConsoleMode( handle, dwMode ); { int a = 30; cout << "\x1b[30m" << a << endl; } { int b = 31; cout << "\x1b[31m" << b << endl; } cin.get(); }
i wygląda ok, tylko muszę robić non stop to samo i kod wyjdzie dosyć długi. Już próbuję tą inną wersję |
|
wokub Temat założony przez niniejszego użytkownika |
» 2016-11-20 14:07:53 Działa, chwała Ci! #include <iostream> #include <windows.h> #define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
using namespace std;
int main() { HANDLE handle; handle = GetStdHandle( STD_OUTPUT_HANDLE ); DWORD dwMode = 0; GetConsoleMode( handle, & dwMode ); dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING; SetConsoleMode( handle, dwMode ); for( int i = 30; i <= 47; i++ ) { cout << "\x1b[" << i << "m" << i << endl; } cin.get(); }
Ostateczna wersja, jakby ktoś miał kiedyś taki sam problem i by szukał podpowiedzi. Dzięki wielkie za pomoc |
|
« 1 » |