[C] Formatowanie pozycji tekstu w konsoli
Ostatnio zmodyfikowano 2013-05-25 17:41
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.htmlCzyli 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: 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: 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. |
|
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. |
|
DejaVu |
» 2013-05-25 13:29:07 printf( "\n %9d. %9s %9s %9s %9d %9.2lf/h", index, pt.nazwa, pt.marka, pt.kategoria, pt.ilosc, pt.koszt );
|
|
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 ;) |
|
« 1 » |