.precision



  • Hallo 🙂
    ich bin absoluter Anfänger in C++ und auch allgemein in Programmieren.
    Ich bin gerade am lernen wie man mittels cout die Ausgabe "formatiert".

    cout.precision(2)
    

    Das ist zwar schön und gut, nur wie bekomme ich das wieder weg?

    cout.precision(2)
    cout << variable_precision << endl;
    cout << soll_nicht_precision << endl;
    cout << jetzt_sind_alle_precision << endl;
    

    Ich habe mal anstatt cout versucht printf zu nutzen. Das funktioniert eigentlich, aber ich lerne C++ und != C.
    Deswegen meine Frage: Wie begrenzt man cout.precision nur auf eine oder sogar bestimmte Zeilen?

    Danke 🙂
    PS: In meinem Buch steht das wenn ich printf nutzen will dann muß ich
    #include<cstdio>
    einbinden, komischerweise muß ich das nicht, die printf-Funktion klappt auch so.

    Mein Header enthält nur
    #include<iostream>

    -----------------------------------------------------
    Bücher: C++ von Markt und Technik
    Programmieren mit einfachen Beispielen

    und

    C++ von Hanser
    Einführung und professionelle Programmierung



  • Hi

    Ich würde das jetzt so lösen

    #include <iostream>
    using namespace std;
    
    int main()
    {
        int old = cout.precision();
        cout.precision(); 
        cout << 12345.67890 << endl; 
        cout.precision(8);
        cout << 12345.67890 << endl;
        cout.precision(old); 
        cout << 12345.67890 << endl;
    
        return 0;
    }
    

    Cu
    André



  • Hallo,

    du hast auch die Moeglichkeit, das Ganze direkt in die cout-Anweisung zu bringen:

    cout << setprecision(x) << y;
    

    mfg
    v R



  • virtuell Realisticer schrieb:

    Hallo,

    du hast auch die Moeglichkeit, das Ganze direkt in die cout-Anweisung zu bringen:

    cout << setprecision(x) << y;
    

    mfg
    v R

    Natürlich 🙂

    Cu
    André



  • Auch wenn es manche C++ Programmierer nicht gerne hören, die Familie der .printf Funktionen sind auch Bestandteil der C++ Standards.

    In deinem Fall würde ich die sprintf Funktion anstelle der printf Funktion benutzen.
    sprintf legt den Formatierten Sting in einem Buffer ab.
    Die Ausgabe sollte aber in der C++ üblichen weise erfolgen.

    Das Mischen von cin/cout mit gets/printf in einem Programm ist mehr als unschön und definitiv zu vermeiden, und kann teilweise Seiteneffekte haben. Es wiederspricht auch jeglichem guten Stil

    Aber auf die excellenten und übersichtlichen Formatiermöglichkeiten, des sprintf zu verzichten wäre genauso Blödsinn



  • Hallo
    danke für die Antworten.

    int old = cout.precision(); 
        cout.precision();  
        cout << 12345.67890 << endl;  
        cout.precision(8); 
        cout << 12345.67890 << endl; 
        cout.precision(old);  
        cout << 12345.67890 << end
    

    Hab ich nicht kapiert. Es wird eine Variable namens old mit cout.precision() deklariert. Allerdings wirkt dieses cout.precision schon direkt auf das erste cout, auf das

    cout.precision(old)
    cout << 12345.67890 << endl;
    

    wirkt es aber nicht. Bin ich vielleicht noch zu unwissend für. Auf jeden Fall nicht das was ich suche.
    -------------

    du hast auch die Moeglichkeit, das Ganze direkt in die cout-Anweisung zu bringen:

    cout << setprecision(x) << y;

    float y = 98765.43210;
        cout << setprecision(2) << y << endl;
        cout << y << endl;
    

    Ergebnis der Ausgabe (IST):
    98765.43210
    98765.43210
    Ergebnis der Ausgabe(SOLL)
    98765.43
    98765.43210

    Das 2te cout bekommt die () auch mit übergeben. Aber die Schreibweise gefällt mir besser. Man muß nur daran denken die

    #include<iomanip>
    

    mit einzubinden, sonst ging es bei mir nicht, so stand es bei mir in der Hilfedatei. Aber wie gesagt es löst nicht das Problem was ich meinte.
    -------------
    Ich finde es schon seltsam das man an solchen Kleinigkeiten scheitert, gerade wo ich doch erst anfange damit. Ich denke mal ich lerne erst mal ein wenig mehr um mich in die Materie besser eindenken zu können. Vielleicht stoße ich ja auf die Lösung während ich das Buch durchackere.
    Das es schwer wird wußte ich ja.

    Danke für eure Aufmerksamkeit

    Happy WE
    MfG

    PS:

    Lerne in C++ zu denken



  • silizium schrieb:

    Allerdings wirkt dieses cout.precision schon direkt auf das erste cout, auf das

    cout.precision(old)
    cout << 12345.67890 << endl;
    

    wirkt es aber nicht. Bin ich vielleicht noch zu unwissend für. Auf jeden Fall nicht das was ich suche.

    Also bei mir wirkt es. Es macht die selbe ausgabe wie bei der ersten Zahl:

    12345.7
    12345.6789
    12345.7

    Das wird bei mir ausgegeben, also hast du doch wieder die alte Präzision.

    Code-Hacker



  • 12345.7
    12345.6789
    12345.7
    Das wird bei mir ausgegeben, also hast du doch wieder die alte Präzision.

    int old = cout.precision();  
        cout.precision();   
        cout << 12345.67890 << endl;   
        cout.precision(8);  
        cout << 12345.67890 << endl;  
        cout.precision(old);   
        cout << 12345.67890 << end
    

    Das klappt, zumindest scheint es so zu sein. Wenn man aber mal ein paar Werte ändert sieht man das es nicht so ist.

    #include<iostream> 
    using namespace std; 
    
    int main() 
    { 
        int old = cout.precision(9); //Wert in 9 geändert
        cout.precision();            //Unverändert
        cout << 12345.67890 << endl;  
        cout.precision(8); 
        cout << 12345.67890 << endl; 
        cout.precision(old);         //Sollte auch 9 sein?!
        cout << 12345.67890 << endl; 
    
        return 0; 
    }
    
    Die Ausgabe davon ist 
    12345.6789
    12345.679
    12345.7
    
    //Noch ein Beispiel
    #include <iostream> 
    using namespace std; 
    
    int main() 
    { 
        int old = cout.precision(9); //Ist ja auf 9
        cout.precision(6);           //Geändert auf 6, jetzt wirkt 9 nicht mehr
        cout << 12345.67890 << endl;  
        cout.precision(8); 
        cout << 12345.67890 << endl; 
        cout.precision(old);         //Wirkt nicht
        cout << 12345.67890 << endl; 
    
        return 0; 
    }
    
    Die Ausgabe davon
    12345.7
    12345.679
    12345.7
    

    Wie man sieht wirkt die erste .prezision auch auf die erste cout aber nicht auf die *(old). Vielleicht kann man cout.prezision nicht benutzen um eine Variable zu initialisieren?

    MfG


Anmelden zum Antworten