WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 17.12.2003, 20:36   #1
Bastet
Elite
 
Registriert seit: 07.09.2000
Beiträge: 1.036


Standard c++ manipulatoren - setprecision()

so kleine vorgeschichte... bis vor 3 wochen hab ich nicht mal c gekonnt, das meiste hab ich mir selbst mit learning by doing und unterlagen ausm inet beigebracht, gestern hatte ich endlich meinen ersten kurstag in c++ und unser lehrer ist von ner htl.

unten hab ich nun ein beispiel aus den kursunterlagen, mich würde nur interessieren, weshalb unser lehrer nicht auf meine lösung gekommen ist, er hat es absolut umständlich gelöst und auch schon in der kursmaterie vorgegriffen (... weiss nicht mehr genau... habs mir nicht notiert) jedenfalls, hat er es mit ner zusätzlichen var und einem rechenbeispiel gelöst...

AUFGABE war: ein programm zu schreiben wobei vom benutzer eingegebene daten wiefolgt formatiert werden sollen:
habs ein wenig abgekürzt.
artnummer (6stellig, linksbündig) 2 leerzeichen, artname (20 zeichen, rechtsb.), 2 leerzeichen, ekpreis (6stellig, 2 nachkommastellen, rechtsb.) 2 leerzeichen,vkpreis (6stellig, 2 nachkommastellen, rechtsb.) ausgabe in einer zeile!!

meine lösung funzt einwandfrei und wäre:
Code:
# include <iostream>
# include <iomanip>

using namespace std;

void main()
{
        int artnummer;
        float ekpreis, vkpreis;
        char artname[20];

        cout << " Artikelnummer eingeben  : ";
        cin  >>  artnummer; 
        cout << " Artikelname eingeben : ";
        cin  >>  artname; 
        cout << " Einkaufspreis eingeben : ";
        cin  >>  ekpreis; 
        cout << " Verkaufspreis eingeben : ";
        cin  >>  vkpreis; 
	
        cout.setf(ios::fixed, ios::floatfield);

        cout << left << setw(6) << artnummer << "  "
                 << setw(20) << artname << "  "
                 << right << setw(8) << setprecision(2) << ekpreis << "  "
                 << setw(8) << setprecision(2) << vkpreis;

        cin.ignore(10, '\n');
        cin.get();
}
lt. kursbuch :
setprecision() setzen der maximalanzahl der nachkommastellen aller nachfolgenden fliesskommazahlausgaben. die letzte stelle wird gerundet. cout << setprecision(2); mehr steht dazu nicht!!!

wenn ich aber nur dies im bspl angebe, wirds auf die gesamte eingegebene zahl bezogen. deshalb hab ich heute im inet recherhiert und bin auf folgendes gestossen:

precision()
die anzahl der nachkommastellen kann mit setprecision nicht wirklich erweitert, sondern nur eingeschränkt werden. (bezgl.. gesamtstellenanzahl)
erst muss mit cout.setf(ios::fixed; ios::floatfield); in den fliesskommamodus geschaltet werden. ansonsten interpretiert setprecision() den übergebenen wert als gesamtzahl der ziffern und nicht als die nachkommastellen.

so weit so gut.... bis dahin hab ichs schon verstanden. dass er den rest mit nullen auffüllt auch, ABER (JETZT KOMMEN MEINE FRAGEN) wieso ist die letzte stelle keine null sondern eine zahl? zb. eingabe: 25.30 - ausgabe: 25.300006

und wie lautet die syntax für die rückstellung (flag löschen) und wo muss ich diese hinschreiben?
ich würde es vor dem cin.ignore() wiefolgt schreiben: unsetf(ios::scientific, ios::floatfield);


*uff* ich hoffe diesesmal hab ich es gut erklärt *schweissvonderstirnwisch*
ajo... bitte noob erklärungen dankeschön
____________________________________
Bye Bastet

Bastet ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:47 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag