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

[C] Formatowanie pozycji tekstu w konsoli

Ostatnio zmodyfikowano 2013-05-25 17:41
Autor Wiadomość
plotka92
Temat założony przez niniejszego użytkownika
[C] Formatowanie pozycji tekstu w konsoli
» 2013-05-24 14:59:08
Witam. Piszę program na zaliczenie i napotkałem pewien problem o charakterze estetycznym. Przy pobieraniu danych z pliku chciałbym aby były one wyświetlane tak jakby były w tabeli. Np.
Nazwa           Marka     Kategoria    8    18/h
Nazwa_długa     Marka_2   Kat          10   205/h

Aktualnie:
http://zapodaj.net/47dcd796f65b5.png.html

Czyli krótko mówiąc aby "spacje" dobierały się automatycznie do najdłuższego słowa w danej kolumnie. Próbowałem już wiele rozwiązań jakie przyszły mi do głowy lecz żadne nie dawały pożadanego efektu. Dlatego proszę o jakieś sugestię (nie koniecznie kod) w jaki sposób najlepiej uzyskać pożądany efekt.

Urywek kodu odpowiadający za odczyt:
C/C++
void odczyt() {
    system( "cls" );
    printf( "\n Stan magazynu: \n" );
    struct osoba pt;
    char dane[ 81 ];
    int index = 1;
   
    FILE * ws;
    ws = fopen( "test.rec", "rb" );
    while( fread( & pt, sizeof( pt ), 1, ws ) == 1 ) {
        printf( "\n %d. %s %s %s %d %.2lf/h", index, pt.nazwa, pt.marka, pt.kategoria, pt.ilosc, pt.koszt );
        ++index;
    }
    fclose( ws );
}

ROZWIAZANIE:
C/C++
int size_d( int x ) {
    return 10 -( sizeof( x ) );
}
void odczyt() {
    system( "cls" );
    printf( "\n Stan magazynu: \n" );
    struct osoba pt;
    char dane[ 81 ];
    int index = 1;
   
    FILE * ws;
    ws = fopen( "test.rec", "rb" );
    while( fread( & pt, sizeof( pt ), 1, ws ) == 1 ) {
        printf( "\n %d. %*s %*s %*s %*d %*.2lf/h", index, 5 -( sizeof( pt.nazwa ) ), pt.nazwa, 5 -( sizeof( pt.marka ) ), pt.marka, 8 -( sizeof( pt.kategoria ) ), pt.kategoria, size_d( pt.ilosc ), pt.ilosc, size_d( pt.koszt ), pt.koszt );
        ++index;
    }
    fclose( ws );
}

Trochę długie ale działa ;) Dzięki za nakierowanie, próbowałem podobnie wczesniej lecz probowałem poprzez %*xd i inne podobne formy ;) Moze komus sie przyda.
P-83774
pekfos
» 2013-05-24 15:16:49
Wyszukuj najdłuższą wartość z każdej kolumny i na podstawie tego określaj szerokości dla printfa.
P-83775
DejaVu
» 2013-05-25 13:29:07
C/C++
printf( "\n %9d. %9s %9s %9s %9d %9.2lf/h", index, pt.nazwa, pt.marka, pt.kategoria, pt.ilosc, pt.koszt );
P-83833
plotka92
Temat założony przez niniejszego użytkownika
» 2013-05-25 17:41:39
Kod powyżej sprawi ze będą przesunięte o stałą szerokość i przy rożnych nazwach (różna długość) nie da pożądanego efektu. Rozwiązanie wstawiłem już wyżej ;)
P-83852
« 1 »
  Strona 1 z 1