• 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
135 wizyt
pytanie zadane 17 marca 2016 w C i C++ przez easytodo Gaduła (4,910 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,050 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 (125,440 p.)
Ehh, Google jest aż tak trudne do opanowania?

http://bfy.tw/4oDK

Podobne pytania

0 głosów
2 odpowiedzi 308 wizyt
pytanie zadane 3 kwietnia 2016 w C i C++ przez chet Nowicjusz (170 p.)
+2 głosów
2 odpowiedzi 67 wizyt
pytanie zadane 23 stycznia w HTML i CSS przez Patryk Sadkowski Nowicjusz (200 p.)
0 głosów
2 odpowiedzi 68 wizyt
pytanie zadane 3 sierpnia 2016 w HTML i CSS przez alus152 Bywalec (2,610 p.)
...