Problem mit setfill()
-
Hallo zusammen,
ich habe in meiner Konsole einer Ausgabe eine feste Breite zugewiesen (mit setw()). Nun möchte ich das ganze Feld mit '-' Zeichen füllen (also es soll eine Linie entstehen). Da ich nicht eine riesen lange Linie zeichnen wollte, habe ich gedacht, dass ich einfach Gebrauch vom Manipulator setfill() zu machen.
So sieht mein Code aus:cout << endl << setw(50) << setfill('-');
Das funktioniert aber nicht. Ich sehe keine Linie. Was mache ich falsch?
Außerdem:
Warum funktioniert das nicht:cout << endl << setw(50) << setfill(65);
setfill übernimmt einen char Parameter. Wenn ich nun 65 eingebe, erwarte ich, dass im ganzen Feld ein A ausgegeben wird. Jetzt kommt aber sogar ein Fehler:
Binärer Operator '<<': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'std::_Fillobj<_Elem>' akzeptiert (oder keine geeignete Konvertierung möglich
Könnt ihr mir helfen?
Vielen Dank
lg, freakC++PS.: iomanip ist eingebunden!
-
Natürlich ist iomanip eingebunden, sonst würde gar nichts kompilieren.
Und wie der Name schon vermuten lässt, sind das manipulatoren, du musst also auch etwas mit cout ausgeben, was dann manipuliert wird, setw/setfill selbst geben nichts aus.
zB.
cout << setfill('0'); cout << "Es ist " << setw(2) << 2 << ":" << setw(2) << 9 << " Uhr";
Es ist 02:09 Uhr
-
Und deine Linie würdest du dann so ausgegeben bekommen:
#include <iostream> #include <iomanip> int main() { std::cout << std::setw(50) << std::setfill('-') << "" << std::endl; return 0; }
-
Hallo,
daran habe ich nicht gedacht, obwohl ich selber "Manipulator" geschrieben habe. Meine letzte Frage besteht aber noch.
Warum kann ich ich das schreibencout << endl << setw(50) << setfill(65);
setfill nimmt doch einen char auf?! Daher sollte doch eigentlich der Buchstabe A ausgegeben werden?
Vielen Dank
lg, freakC++
-
setfill(static_cast<char>(65));
-
Bauchnabelstauraum schrieb:
setfill(static_cast<char>(65));
Ist unnötig aufgrund der impliziten Konvertierung.
Es ist allerdings nicht vorgeschrieben, dass der ASCII-Zeichensatz verwendet werden muss und folglich sollte man Zeichen nicht über Zahlenwerte ansprechen.
-
cout << setfill(65);
VS 2008:
error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'std::_Fillobj<_Elem>' (or there is no acceptable conversion)