LeeHarvey Geschrieben 6. August 2012 Geschrieben 6. August 2012 (bearbeitet) Hi ! Sitze schon seid über einer Stunde dran, finde nicht raus warum ich immer ein falsches Ergebnis bekomme (vermute habe was bei der Verschachtelung falsch gemacht). Das Progrämmchen soll (ohne Strings usw) die Tage zwischen 2 Datume (Daten...wie auch immer) ausgeben. Davon ausgegangen das zweite Datum ist das jüngere bei der Eingabe. Meine Testdaten die nicht funktionieren sind: 1. Datum: 05.08.2011 und das 2. Datum: 05.03.2012. Rauskommen müsste 210, kommt aber 120. #include <iostream> #include <QString> #include <ncurses.h> using namespace std; // int month[12]; int day1, day2, month1, month2, tempMonth, year1, year2; int output; int main() { cout << "Please enter the first day (Format: 00): " << endl; cin >> day1; cout << "Please enter the first month (Format: 00): " << endl; // cin >> month[0]; cin >> month1; cout << "Please enter the first year (Format: 0000) " << endl; cin >> year1; cout << "Please enter the second day (Format: 00): " << endl; cin >> day2; cout << "Please enter the second month (Format: 00): " << endl; cin >> month2; cout << "Please enter the second year (Format: 0000): " << endl; cin >> year2; if (year1 = year2) { if (month1 < month2) { tempMonth = (month2 - month1) - 2; tempMonth = tempMonth * 30; day1 = 30 - day1; output = (day1 + day2) + tempMonth; cout << "The days between both dates: " << output << endl; cout << "" << endl; } else { tempMonth = (month1 - month2) - 2; tempMonth = tempMonth * 30; day1 = 30 - day1; output = (day1 + day2) + tempMonth; cout << "The days between both dates: " << output << endl; cout << "" << endl; } } else { if (month1 < month2) { month1 = 12 - month1; tempMonth = (month1 + month2) - 1; tempMonth = tempMonth * 30; day1 = 30 - day1; output = (day1 + day2) + tempMonth; cout << "The days between both dates: " << output << endl; cout << "" << endl; } else { month1 = 12 - month1; tempMonth = (month1 + month2) - 1; tempMonth = tempMonth * 30; day1 = 30 - day1; output = (day1 + day2) + tempMonth; cout << "The days between both dates: " << output << endl; cout << "" << endl; } } } Bearbeitet 6. August 2012 von LeeHarvey Zitieren
flashpixx Geschrieben 6. August 2012 Geschrieben 6. August 2012 Du solltest Dir einmal Unixzeit anschauen, mit Hilfe des Timestamps lässt sich um ein vielfaches einfacher arbeiten, als mit Deiner Methode. Außerdem solltest Du Dir difftime - C++ Reference anschauen Zitieren
Klotzkopp Geschrieben 6. August 2012 Geschrieben 6. August 2012 vermute habe was bei der Verschachtelung falsch gemachtWenn du davon ausgehst, dass jeder Monat 30 Tage hat (was du offenbar tust), brauchst du überhaupt keine Verschachtelung. Zitieren
habbeda Geschrieben 6. August 2012 Geschrieben 6. August 2012 Es würde nicht schaden, die Tage je Monat etwas realistischer zu gestalten. Auch solltest Du Dir einmal überlegen, was eigentlich die folgende Zeile in Deinem Code anrichtet: if (year1 = year2) Zitieren
Shadak Geschrieben 7. August 2012 Geschrieben 7. August 2012 (bearbeitet) ein heißer tipp: in C ist = keine überprüfung, sondern ne zuweisung. den fehler mach ich auch ständig wenn ich mit zuwenig koffein im blut code schreibe... == ist die überprüfung. abgesehen von den 30 Tage-Monaten fehlt da auch noch ne schaltjahrbetrachtung. ach ja, plural von Datum ist simpel: Daten ^^ Bearbeitet 7. August 2012 von Shadak Zitieren
LeeHarvey Geschrieben 7. August 2012 Autor Geschrieben 7. August 2012 Leute Leute Danke f die vielen Antworten aber das ist eine Übung die so gestellt wurde. Banken rechnen mit 30 Tagen pro Monat also 360 Tage im Jahr, und ich soll da ohne Arrays oder so arbeiten sondern rein logisch denken und versuchen so den Code zu basteln. @ Shadak: ja == Zuweisung, = Vergleich, muss ich nochmal drübersehn wo das falsch ist. Und Schaltjahr ist da nicht relevant aber bei Lust und Laune bau ich das mit ein. @ habbeda: diese Bedingung (year1 = year2) richtet an dass wenn die beiden Daten im selben Jahr liegen (was die Berechnung ja easy macht) ich nicht mit Jahreswechsel rechnen muss, ansonsten wenn das eine Datum 2011 ist das andere 2012 die Aufgabe schon um einiges schwieriger wird. @ flashpixx: diese difftime Funktion ist zu viel des guten aber danke trotzdem Die Aufgabe dient zum Üben des logischen Verständnisses. Geht das überhaupt dass man rein mathematisch und logisch so eine jahrübergreifende Rechnung hinbekommt ? Ohne einem Array dass sagt "höchstens 12 (Monate)" ? Zitieren
flashpixx Geschrieben 7. August 2012 Geschrieben 7. August 2012 ja == Zuweisung, = Vergleich, muss ich nochmal drübersehn wo das falsch ist. Nein das ist falsch: = Zuweisung und == Vergleich Geht das überhaupt dass man rein mathematisch und logisch so eine jahrübergreifende Rechnung hinbekommt ? Ja, aber sinnvoll so ist es nicht Zitieren
LeeHarvey Geschrieben 7. August 2012 Autor Geschrieben 7. August 2012 Übungszweck. Die Synapsen aktivieren, Proteine im Hirn verbrennen Naja ich werds schon hinbekommen. Würde es mal einfach mit nem Array versuchen. Ups ja, = Zuweisung, == Vergleich Zitieren
Shadak Geschrieben 7. August 2012 Geschrieben 7. August 2012 (bearbeitet) @ Shadak: ja == Zuweisung, = Vergleich, muss ich nochmal drübersehn wo das falsch ist. Und Schaltjahr ist da nicht relevant aber bei Lust und Laune bau ich das mit ein. *kaffetasse rüberschieb* Geht das überhaupt dass man rein mathematisch und logisch so eine jahrübergreifende Rechnung hinbekommt ? Ohne einem Array dass sagt "höchstens 12 (Monate)" ? musst halt ein paar ifs mehr einbauen... nebenbei, deine benutzereingabe zu programmanfang ist nicht sehr benutzerfeundlich...ich hätt da 2 integers (date1, date2) eingeben lassen mit format 8 stellen und diese 8 stellen dann über ne forschleife mit modulo intern runterbrechen lassen. Bearbeitet 7. August 2012 von Shadak ich brauch mehr kaffee... Zitieren
LeeHarvey Geschrieben 7. August 2012 Autor Geschrieben 7. August 2012 @ shadak: lol i know, habs umständlich gemacht mit der Eingabe zu Beginn. Verstehe aber nicht wie das mit Modulo gehen soll. Sind doch Punkte dazwischen ... Zitieren
Shadak Geschrieben 7. August 2012 Geschrieben 7. August 2012 integer haben keine punkte.^^ lass es einfach als TTMMJJJJ eingeben Zitieren
Klotzkopp Geschrieben 7. August 2012 Geschrieben 7. August 2012 Geht das überhaupt dass man rein mathematisch und logisch so eine jahrübergreifende Rechnung hinbekommt ? Ohne einem Array dass sagt "höchstens 12 (Monate)" ? Wofür solltest du ein Array brauchen? Du brauchst noch nicht einmal ein if. Zitieren
flashpixx Geschrieben 7. August 2012 Geschrieben 7. August 2012 nimm Chapter 7. Boost.Date_Time - Boost 1.50.0 und schau Dir an, wie das parsen von String funktioniert Examples - Boost 1.50.0 Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.