AnonymousX Geschrieben 20. März 2012 Teilen Geschrieben 20. März 2012 Hi alle zusammen, und zwar habe ich ein kleines Problem. Ich musste für ein Projekt ein Programm schreiben, welches eigentlich auch schon fertig ist. Es handelt sich dabei um die Ausgabe eines Kalenderblattes nach Eingabe des Monats und Jahres. Bis jetzt hat auch alles super funktioniert, aber auf einmal bekomme ich seltsame Fehler. Ich poste einmal den Quellcode-Abschnitt um den es geht: //So viele Leerzeichen, bis der 1. Tag des Monats unter dem richtigen Wochentag steht for (l = 1; l < wTag; l++) { Console.Write(" "); j++; } //Ausgabe der Tage unter den Wochentagen bis die Anzahl der Monatstage erreicht wurden for (i = 1; i <= mAnzahl; i++) { //Formatierung für die korrekte Ausgabe der Tage unter den Wochentagen if (i < 10) { Console.Write(" {0} ", i); j++; } else { Console.Write("{0} ", i); j++; } //Wenn eine ganze Woche erreicht wurde, dann Zeilenumbruch //und wieder am Wochenanfang beginnen if (j == 7) { Console.Write("\n\t"); j = 0; } } Mein Problem ist nun, dass wenn ich das Programm abspiele und irengdein Monat und Jahr eingebe, dann wird es oft richtig formatiert aber manchmal auch falsch. Er macht dann keine Zeilenumbrüche mehr sondern reiht die Tage einfach hintereinander an. Wenn ich das aber im Debugger abspiele, dann wird auch alles richtig berechnet und ausgegeben. Hat vielleicht jemand eine Idee, warum es manchmal geht und manchmal nicht? Irgendwie muss es doch damit zusammenhängen, dass er die if-Bedingung für den Zeilenumbruch nicht ausführt, aber warum? Danke schonmal im Voraus Gruß AnonX Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 20. März 2012 Teilen Geschrieben 20. März 2012 Vermutlich ist j an dieser Stelle dann bereits größer als 7. Leider fehlt im gezeigten Code die Initialisierung von j, und auch der Wertebereich von wTag wäre interessant. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
AnonymousX Geschrieben 20. März 2012 Autor Teilen Geschrieben 20. März 2012 Vermutlich ist j an dieser Stelle dann bereits größer als 7. Leider fehlt im gezeigten Code die Initialisierung von j, und auch der Wertebereich von wTag wäre interessant. j ist zu Anfang mit 0 initialisiert und wird außer im angezeigten Code nirgendwo anders noch verwendet. wTag ist der 1. Wochentag im Monat und wird mithilfe der Gauß'schen Wochenformel berechnet. //1. Wochentag im Monat berechnen if (Monat == 1 || Monat == 2) { dJahr -= 1; Monat += 12; } dTag = (1 + (2 * Monat) + ((3 * Monat + 3) / 5) + dJahr + (dJahr / 4) - (dJahr / 100) + (dJahr / 400)); wTag = (dTag % 7) + 1; //Wochentage werden von 1-7 gezählt, der Sonntag soll der 7. Tag sein if (wTag == 0) { wTag = 7; } Wenn es also daran liegt, dass j zu dem Moment größer als 7 ist, dann werde ich den Code nochmal an der Stelle bearbeiten und testen. Jedoch stelle ich mir immer noch, wie j denn überhaupt größer als 7 werden kann...? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
AnonymousX Geschrieben 20. März 2012 Autor Teilen Geschrieben 20. März 2012 Edit: Sorry wegen Doppelpost, aber ich kann nicht mehr editieren Ich weiß aber nun wo das Problem war. Das Programm lief in einer do-while-Schleife ab. Ich habe aber die Initialisierung von j außerhalb der Schleife definiert, was dann eben bei mehrmaliger Ausführung des Programms wahrscheinlich dazu führte, dass j immernoch mit dem letzten Wert zugewiesen war und folglich dann immer größer wurde. Habe das jetzt korrigiert und alles klappt wieder wunderbar @Klotzkopp: Danke für die Hilfe, hat mir sehr weitergeholfen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
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.