While-Schleife

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Robocop1
Beiträge: 24
Registriert: Mo Dez 07, 2020 3:59 pm

While-Schleife

Beitrag von Robocop1 » Sa Dez 26, 2020 3:32 am

Hi,
ich habe in folgendem Code (einfacher Kalendar) das Problem, dass ich bei der While-Schleife sehe, dass nach 7 Ausgaben/Tagen eine neue Zeile anfängt, verstehe jedoch die Logic der Code-Struktur dahinter nicht.

Wieso wird k++ erhöht wenn dies der Wochentag des Monatsersten (Mo-So.) ist, den man anfänglich per 0-7 festlegt, k müsste ja eine Konstante sein?? Weiters verstehe ich bei der for-Schleife nicht was hier "j--" im Kalender bewirkt.

Vielleicht kann mir jemand auf die Sprünge helfen?
Danke!

PS: finde grade nicht das separate Fenster zur Code-Eingabe hier.

Code: Alles auswählen

#include<stdio.h>
#include<stdlib.h>

int main()
{
  //day = Anzahl der Tage, k = Wochentag d. Monatsersten,
    int i, j, k, day, dt=1;

    printf("Kalender druck auf Basis von Monatstagen & Monatserster, wobei Sonntag = 0 \n\n");

    printf("Eingabe_Anzahl der Tage des Monats: ");
    scanf("%d",&day);
    printf("Eingabe_Wochentag des Monatsersten: ");
    scanf("%d",&k);
    printf("\n");

    for(j=k;j>0;j--)
    {
        printf("\t");
    }

    while(dt<=day)
    {
        if(k!=0)
        {
         if(k%7==0)
         printf("\n");
        }

  printf("%d\t",dt);
        dt++;
        k++;
    }
    return(0);

}
Edit by Xin: Codetags eingefügt

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: While-Schleife

Beitrag von Xin » Sa Dez 26, 2020 12:18 pm

Wo kommt der Code her?

j-- bedeutet, dass j um eins verringert wird. Solange j>0 ist, wird ein Tab eingefügt.

k wird vergrößert, weil immer dann, wenn k geteilt durch 7 den Rest 0 ergibt eine neue Zeile eingefügt werden soll. Da sich k hier verändert, um diese Entscheidung treffen zu können, darf k keine Konstante sein.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Robocop1
Beiträge: 24
Registriert: Mo Dez 07, 2020 3:59 pm

Re: While-Schleife

Beitrag von Robocop1 » Sa Dez 26, 2020 5:10 pm

Danke für die Erklärung, das hilft mal weiter!
Habe die Codes aus eigenen Unterlagen bzw. aus diversen Foren zusammengefügt, die konkrete Seite mit der while-Schleife find ich jetzt gerade nicht.
https://www.youtube.com/watch?v=VRcJpUO ... chsaneGirl

Mein Beispiel ist ein vereinfachte Variante, ohne Text erstmal.

Muss nochmal das Konzept genau verstehen, wie man in C programmiert was in Spalten/Reihen wann ausgegeben werden soll.

Robocop1
Beiträge: 24
Registriert: Mo Dez 07, 2020 3:59 pm

Re: While-Schleife

Beitrag von Robocop1 » So Dez 27, 2020 1:29 am

Hi,
wenn ich nun statt printf("\t"); oder printf("%d\t", i); Abständen --> printf("%3d") mit genau 3 Stellen verwenden möchte funktioniert die Tabelle nicht mehr. Habe ich da etwas übersehen?
edit:
Sorry Frage gelöst: printf(" ") ohne Integer dahinter bzw. eben mit "%3d".



eine Frage hätte ich noch bitte, kann man dies nicht mit "oder "|| lösen anstatt 2x if, für k =/= 0 und k durch 7 ohne Restwert ?

Bei mir hat es nicht funktioniert, er schreibt dann alle Tage einzeln untereinander, bei
if( (k != 0) || (k % 7 == 0) ) {
printf("\n");
}

Code: Alles auswählen

 while(dt<=day)
    {
        if(k!=0)
        {
         if(k%7==0)
         printf("\n");
        }

  printf("%d\t",dt);
        dt++;
        k++;
    }
    return(0);
}

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: While-Schleife

Beitrag von Xin » So Dez 27, 2020 12:41 pm

Robocop1 hat geschrieben:
So Dez 27, 2020 1:29 am
eine Frage hätte ich noch bitte, kann man dies nicht mit "oder "|| lösen anstatt 2x if, für k =/= 0 und k durch 7 ohne Restwert ?

Bei mir hat es nicht funktioniert, er schreibt dann alle Tage einzeln untereinander, bei

Code: Alles auswählen

if( (k != 0) || (k % 7 == 0) ) {
            printf("\n");
            }
|| bedeutet "oder". Die geschachtelten if-Abfragen bedeutet, dass wenn die erste Abfrage true ergibt, dann mache die zweite abfrage UND dann...
Es müssen beide Bedingungen erfüllt sein. "und" heißt &&.

Code: Alles auswählen

if( (k != 0) && (k % 7 == 0) ) {
            printf("\n");
            }
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Robocop1
Beiträge: 24
Registriert: Mo Dez 07, 2020 3:59 pm

Re: While-Schleife

Beitrag von Robocop1 » So Dez 27, 2020 2:46 pm

Verstanden, danke!!

Antworten