Zum Inhalt springen

C# Falsche Formatierung der Ausgabe


AnonymousX

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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...?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...