![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Elite
![]() Registriert seit: 07.09.2000
Beiträge: 1.036
|
![]() 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(); } 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 ![]() ![]()
____________________________________
Bye Bastet |
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|