Was funktioniert hier nicht?
-
Dobi schrieb:
Wann sollte denn (cin>>jahr) false werden?
Edit: Oh, ich war viel zu lahm.

z.B. wenn er fälschlicherweise einen String anstelle einer Zahl eingibt.
-
Ich denke, dass alles gesagt wurde, was zu sagen ist.
Ich würde aber an deiner Stelle auf die Strings verzichten.Mein Ansatz:
#include <iostream> //Prototyp von wait(): //Wait soll das Schließen der Konsole unterdrücken // void wait(); int main() { //Eingabe des Tages // std::cout << "Bitte Tag eingeben (TT):" << std::endl; int nTag = 0; do { std::cin >> nTag; } while((nTag <= 0) || (nTag > 31)); std::cout << "Tag: " << nTag << std::endl; //Eingabe des Monats // std::cout << "\nBitte Monat eingeben(MM):" << std::endl; int nMonat = 0; do { std::cin >> nMonat; } while((nMonat <= 0) || (nMonat > 12)); std::cout << "Monat: " << nMonat << std::endl; //Eingabe des Jahrs // std::cout << "\nBitte Jahr eingeben (1901 - 2099):" << std::endl; int nJahr = 0; do { std::cin >> nJahr; } while((nJahr < 1901) || (nJahr > 2099)); std::cout << "Jahr: " << nJahr << std::endl; //Prüfen auf Schaltjahr // if((nJahr % 4 == 0) && (nJahr % 100 != 0) || (nJahr % 400 == 0)) { std::cout << "\nDas Jahr " << nJahr << " ist ein Schaltjahr" << std::endl; } //Ausgabe des gesamten Datums // std::cout << "Das eingegeben Datum lautet:" << std::endl; std::cout << nTag << "." << nMonat << "." << nJahr << std::endl; //Konsole offen lassen // wait(); } //Prozedur um das Schließen der Konsole zu unterdrücken // void wait() { std::cout << "\nZum Beenden ENTER druecken..."; std::cin.clear(); std::cin.sync(); std::cin.get(); }
-
vielen dank für eure zahlreichen Antworten.
Das Problem mit dem String ist, dass ich die Eingabe von Tag und Monat genau formatieren muss (laut Angabe). Das heisst: wenn 1 (für Jänner) eingegeben wurde ist es flasch, es muss 01 heissen. Deshalb die umständliche Sache mit dem String.
Werde auf jeden Fall die Schleifen nochmal überarbeiten. Danke nochmal!:)
-
Mit dem code von cooter ist das doch kein Problem die Ausgabe dahingehend zu manipulieren.
-
Für eine formatierte Ausgabe eignet sich natürlich auch printf:
http://www.cplusplus.com/reference/clibrary/cstdio/printf/Hier noch ein kleines Beispiel:
printf("%0.2d.%0.2d.%d", nTag, nMonat, nJahr);Ich habe dafür cstdio eingebunden

LG
Cooter
-
HighLigerBiMBam schrieb:
Mit dem code von cooter ist das doch kein Problem die Ausgabe dahingehend zu manipulieren.
Hab mich da gestern mit jm im Forum unterhalten, der meinte ich solls mit string versuchen, deshalb mein Ansatz mit string:)
aber egal, man lernt ja nur durch probieren, werd mir mal das "printf" genau ansehen, schaut auf jeden fall viel-versprechend aus...
danke für die antwort
lg v
-
printf gehört zu den C-Bibliotheken. Du kannst es auch mit stringstreams bewerkstelligen:
std::ostringstream strMonat; if(nMonat < 10) strMonat << "0" << nMonat; else strMonat << nMonat; std::ostringstream strTag; if(nTag < 10) strTag << "0" << nTag; else strTag << nTag; std::cout << "Das eingegeben Datum lautet:" << std::endl; std::cout << strTag.str() << "." << strMonat.str() << "." << nJahr << std::endl;benötigt #include <sstream>. Kann man auch beliebig zusammenfassen etc.
-
Stimmt genau, was HighLigerBiMBam sagt.
Nutze lieber seine Lösung
Hier ist auch noch ein netter Thread zu dem Thema:
-
mein programm funktioniert wieder:)) juhu
hab es soweit fertig, muss noch einen "wochentags-berechner" einbauen. ich meld mich wieder, wenn ich darf, sollte ich probleme damit haben.
bis dahin, einen wunderschönen nachmittagv
-
wollte nur Bescheid geben, dass ich alles soweit geschafft habe und dieser Thread geschlossen werden kann.
Vielen Dank für Eure Hilfe
Vanessa