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

Pętla z ANSI

Ostatnio zmodyfikowano 2016-11-20 14:07
Autor Wiadomość
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:
C/C++
#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?

C/C++
{
    cout << "\x1b[44m" << i << endl;
}
np
C/C++
{
    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.
P-153961
Monika90
» 2016-11-20 13:46:06
P-153964
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?
P-153965
Monika90
» 2016-11-20 13:56:56
wystarczy tak
C/C++
cout << "\x1b[" << i << "m" << i << endl;

Nie wiem co masz na myśli pisząc o funkcjach.
P-153966
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
C/C++
#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ę
P-153967
wokub
Temat założony przez niniejszego użytkownika
» 2016-11-20 14:07:53
Działa, chwała Ci!

C/C++
#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
P-153968
« 1 »
  Strona 1 z 1