Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

C# Falsche Formatierung der Ausgabe

Empfohlene Antworten

Veröffentlicht

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

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

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.