Switch Case Fragen

Hallo Zusammen,
ich bin gearde dabei eine Wetterstation mit Vorhersage zu bauen.
Am Ende des Monates habe ich noch einige Probleme.
Ich habe zwei Variablen auf byte Basis eine heißt morgen und ander ue_morgen.
Mit folgendem switch case.

  switch (mm) {                      // for Definition of tomorrow (+1) and day after tomorrow(+2)
    case 0:
    case 2:
    case 4:
    case 6:
    case 7:
    case 9:
    case 11:
      if (dd == 30) {
        morgen = 31;
        ue_morgen = 1;
      }
      if (dd == 31) {
        morgen = 1;
        ue_morgen = 2;
      }
      break;
    case 1:
      if (isleapyear) {
        if (dd == 28) {
          morgen = 29;
          ue_morgen = 1;
        }
        if (dd == 29) {
          morgen = 1;
          ue_morgen = 2;
        }
      }
      if {!leapyear} {
        if (dd == 27) {
          morgen = 28;
          ue_morgen = 1;
        }
        if (dd == 28) {
          morgen = 1;
          ue_morgen = 2;
        }
      }

      break;
    case 3:
    case 5:
    case 8:
    case 10:
      if (dd == 29) {
        morgen = 30;
        ue_morgen = 1;
      }
      if (dd == 30) {
        morgen = 1;
        ue_morgen = 2;
      }
      break;
  }

Meine Frage kann man dies so machen d.h. wenn mm (Monat) 0,2,4,6,7,9,11 ist läuft er in die erste if bei dem anden unterhalb eben dann in die andere if. Nur der Februar ist eben ein bisschen anders.

Hier geht es nur um den switch case obe dieser "durcheinander" sein darf und man ohne breaks immer bis zur folgenden if läuft.

Gruß
DerDani

Du läufst bis zum nächsten break, nicht if.
Ja, das geht. Die Reihenfolge ist egal.

Gruß Tommy

Edit: Ich würde dem Februar ein eigenes case spendieren.

So meinte ich das in die if und durch die if und haut dann mit dem break raus.

Danke.

Gruß
DerDani

volvodani:
Hier geht es nur um den switch case obe dieser "durcheinander" sein darf und man ohne breaks immer bis zur folgenden if läuft.

Meiner Erfahrung nach ist es vollkommen egal, ob Du nun

...
case 5:
case 7:
...

oder

...
case 7:
case 5:
...

schreibst. Beim passenden case „biegt“ der Programmablauf halt ab - er wechselt von der linken auf die rechte Seite der Fälle und „fällt“ dann nach unten durch, bis er auf ein break; trifft.

Oder habe ich Deine Frage falsch verstanden?

Gruß

Gregor

Genau das war meine Frage.
Ist irgendwie nicht ganz klar in der Refrenz.

Danke für die Infos..

HiHiHiHi das war die 2000.

Gruß
DerDani

Ein bischen kompliziert ist das aber schon mit schwich() {}.

byte tage_im_monat=31-((((monat-1) % 7) & 1);
if (monat==2) tage_im_monat=schaltjahr?28:29;

morgen=1+(tag % tage_im_monat);
uebermorgen=1+((tag + 1) % tage_im_monat);

geht natürlich auch anders ... :slight_smile:

Die Variante mit switch ist evtl. einleuchtender, besonders wenn man sie selbst entwickelt.

Gruß Tommy

… jup, und man soll nicht am notebook schreiben wenn man geht, sonst wird aus “switch” was ganz komisches …

zwieblum:
Ein bischen kompliziert ist das aber schon mit schwich() {}.

byte tage_im_monat=31-((((monat-1) % 7) & 1);

if (monat==2) tage_im_monat=schaltjahr?28:29;

morgen=1+(tag % tage_im_monat);
uebermorgen=1+((tag + 1) % tage_im_monat);




geht natürlich auch anders ... :)

Was muss man um die Ecke denken das so etwas aus dem Brain kommt und funktioniert. ;D
Das werde ich mal probieren.
Gruß
DerDani

Na ja, ich dachte mir, das if-Statement macht die Sache leichter verständlich. Ursprünglich schaute das so aus:

byte tage_im_monat=(monat==2)?(schaltjahr?28:29):31-((((monat-1) % 7) & 1);
morgen=1+(tag % tage_im_monat);
uebermorgen=1+((tag + 1) % tage_im_monat);

Hab' ich erwähnt, dass ich gerne LISP programmiere? 8)

Hi

Denke, hier fällt eher die %7 auf.
Wobei mir das Morgen und Ü-Morgen auch recht gut gefällt.

MfG

Das macht, dass Juli und August 31 Tage haben ... oops ... glaube, das hast du nicht gemeint, oder?
... hoppla, grad' einen typo gefunden: vor "monat" ist eine "(" zu viel ...