resetiosflags macht Ausgabe kaputt



  • Hallo allerseits!

    Wie bereits im Titel geschrieben macht "resetiosflags" irgendwie nicht das, was ich davon erwarte. Ich möchte, dass nach der Ausgabe von "meineZahl" als "00000040" wieder "40" ausgegeben wird. Wie kann ich das erreichen?

    Ich habe folgendes Programm:

    #include <iostream>
    #include <iomanip>
    #include <cmath>
    using namespace std;
    
    int main () {
    
      unsigned long meineZahl = pow(2, 6);
    
      cout << hex << meineZahl << endl;
      cout << setfill ('0') << setw (8);
      cout << hex << meineZahl << endl;
      cout << resetiosflags;
      cout << hex << meineZahl << endl;
      return 0;
    }
    

    Und folgende Ausgabe:

    40
    00000040
    140
    

    Wieso steht vor der "40" jetzt noch ein "1" und wie bekomme ich den Ausgangszustand zurück?

    Mfg,
    Frank


  • Mod

    Guck noch einmal in die Referenz, wie man resetiosflags benutzt:
    http://www.cplusplus.com/reference/iostream/manipulators/resetiosflags/



  • Ich hätte hier nicht gefragt, wenn ich das nicht schon gemacht hätte und trotzdem nicht richtig verstanden hätte. 😉

    Ich möchte im Grund ja nur "setfill ('0')" und "setw (8)" weghaben.
    Mit

    cout << setw(0);
    

    ist die Ausgabe jetzt wieder normal. Wie kann ich nun noch das setfill wegmachen. Oder kann ich das einfach so lassen?

    mfg,
    Frank



  • Es fehlt noch der entsprechende Parameter, d.h. z.B.

    cout << resetiosflags(ios_base::hex) // bzw. kürzer: ios::hex
    

    Das geht aber aus der von SeppJ verlinkten Seite (die ich auch gerade herausgesucht hatte 😉 ganz klar hervor.

    Da aber 'fill' und 'width' nicht zu den Format-Flags zählen, kannst du dieses auch nicht wieder mittels resetiosflags() zurücksetzen.
    Die gute Naxchricht aber ist, wie du ja anhand deines Codes schon gesehen hast, daß setfill() und setw() automatisch nach einer Ausgabe wieder zurückgesetzt werden.
    Laß also einfach das fehlerhafte 'cout << resetiosflags;' bei dir raus (die 1 wird hier ausgegeben, da der Wert in ein bool gewandelt wird und als 0 oder 1 ausgegeben wird).


Anmelden zum Antworten