• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wyrównanie tekstu w konsoli

0 głosów
156 wizyt
pytanie zadane 17 marca 2016 w C i C++ przez easytodo Mądrala (5,240 p.)

Witam, napisałem program gromadzący w pliku .txt dane o uczniów:
-numer ucznia
-imię
-nazwisko
-srednia ocen

Dane zapisane są w strukturze, funkcja wyświetlająca spełnia swoje zadanie w ten sposób:

Nr ucznia     Imie     Nazwisko     Srednia ocen
            1       Marcin      Gortat                6
            2       Jakub        Moch                 5
            3       Adrian       Nowakowski             3 (!!!)

KOD:

cout<<"Nr ucznia    Imie    Nazwisko    Srednia ocen"<<endl;

for (i=0;i<n;i++)
    {
        cout<<"\t"<<a[i].nr_u;
        cout<<"\t"<<a[i].imie;
        cout<<"\t"<<a[i].nazwisko;
        cout<<"\t\t"<<a[i].ocena<<endl;
    }

(!!!) - tutaj pojawia się problem. Imię i nazwisko to tablice char mające 15 znaków. Sęk w tym, że przy zbyt długim nazwisku ocena ucieka o 1 tabulator dalej. Tak więc w jaki sposób mogę zastąpić tabulatory i zrobić wyświetlanie w taki sposób, żeby zrobić sobie "margines bezpieczeństwa" w odległości i sprawić, aby wszystko było wyświetlanie 1 pod drugim bez takich przeskoków przy dłuższych nazwiskach/imionach?
 

@EDIT: Wszystko powinno być równo 1 pod drugim w przykładzie, tylko tutaj na forum ciężko to zrobić :)

2 odpowiedzi

+1 głos
odpowiedź 18 marca 2016 przez Sebastian Fojcik Nałogowiec (39,590 p.)
wybrane 24 marca 2016 przez easytodo
 
Najlepsza

Jeden TAB jest zbyt krótki by zmieścić nazwisko Nowakowski. Tab w konsoli ma długość 8 znaków. To znaczy, że jeśli nazwisko jest dłuższe, to zajmie tabelka się zepsuje. Nie ma na to rady. Konsola nie jest środowiskiem do wypisywania danych w taki sposób. Jedyne co mogę Ci polecić, to użycie modyfikatora strumienia setw(). Ustala on, na jakim polu ma zostać wypisany tekst / liczba.

Podam Ci teraz kod, Ty go przeanalizujesz i będziesz mógł dokładniej o tej funkcji doczytać. W razie problemów, pytaj :-)

#include <iomanip>

cout << right << setw( 5 ) << a[ i ].nr_u;
cout << " " << right << setw( 10 ) << a[ i ].imie;
cout << " " << right << setw( 10 ) << a[ i ].nazwisko;
cout << " " << right << setw( 5 ) << a[ i ].ocena << endl;

Wyjaśnienie do przykładu:
right / left wyrównanie do prawej lub do lewej
setw( n ) wypisane dane zajmą dokładnie n pól (chyba, że np. nazwisko będzie dłuższe niż 10 znaków, to wtedy musisz zwiększyć to pole)

0 głosów
odpowiedź 17 marca 2016 przez shead VIP (131,080 p.)
Ehh, Google jest aż tak trudne do opanowania?

http://bfy.tw/4oDK

Podobne pytania

0 głosów
2 odpowiedzi 423 wizyt
pytanie zadane 3 kwietnia 2016 w C i C++ przez chet Nowicjusz (170 p.)
+2 głosów
2 odpowiedzi 74 wizyt
pytanie zadane 23 stycznia w HTML i CSS przez Patryk Sadkowski Nowicjusz (200 p.)
0 głosów
2 odpowiedzi 77 wizyt
pytanie zadane 3 sierpnia 2016 w HTML i CSS przez alus152 Bywalec (2,670 p.)
Obowiązuje już zaktualizowany regulamin.

Czy wiesz, że nie musisz już odświeżać strony głównej?

Lista pytań i odpowiedzi aktualizuje się automatycznie!

38,498 zapytań

76,314 odpowiedzi

149,011 komentarzy

17,980 pasjonatów

Przeglądających: 250
Pasjonatów: 23 Gości: 227

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...