Veröffentlicht 20. März 201213 j 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
20. März 201213 j 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.
20. März 201213 j Autor 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...?
20. März 201213 j Autor 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
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.