W programie C++ mam kod do wypisania obiektu klasy o nazwie ułamek. Jego zmienne to n (licznik), d (mianownik) i sinal (sygnał: prawda, gdy ułamek jest dodatni, a fałszywy w innym przypadku).iomanip z obiektem klasy
ostream &operator << (ostream &os, const fraction &x){//n=0
if(!x.sinal)
os << "-";
os << x.n;
if(x.d!=1 && x.n!=0)
os << "/" << x.d;
return os;
}
Robi dobrą robotę, ale gdy próbuję użyć setw() w tym, że nie działa prawidłowo: to właśnie wpływa na pierwszą pozycję, która zostanie wydrukowana (czy to sygnał lub licznik).
Próbowałem to zmienić i roztwór znalazłem najpierw przekonwertować go na ciąg znaków, a następnie za pomocą os z iomanip:
ostream &operator << (ostream &os, const fraction &x){//n=0
string xd, xn;
stringstream ssn;
ssn << x.n;
ssn >> xn;
stringstream ssd;
ssd << x.d;
ssd >> xd;
string sfra = "";
if(!x.sinal)
sfra += "-";
sfra += xn;
if(x.d !=1 && x.n != 0){
sfra += "/";
sfra += xd;
}
os << setw (7) << left << sfra;
return os;
}
To działa, ale oczywiście nie jestem w stanie zmienić szerokość, jaką będzie miała frakcja: dla wszystkich będzie 7. Czy istnieje sposób, aby to zmienić? Naprawdę potrzebuję różnych szerokości dla różnych frakcji. Z góry dziękuję.
To jest niesamowite! Dziękuję Ci bardzo. – ahgert