Forum: Compiler & IDEs Problem mit switch case (Anfänger!)


von jabber (Gast)


Lesenswert?

Hallo,
wie oben geschrieben habe ich ein Problem mit der switch Funktion.
Ich wollte nur schnell ein kleinens LCD Menü machen aber irgendwie 
bekomme ich das nicht hin.

hier erst mal der Code.
1
 
2
switch (menutap)
3
{    
4
   case 1 : 
5
      if(tast == DOWN)
6
         {LCD_puts("down",1);
7
          menutap = 2;
8
          }
9
       else if(tast == UP)
10
       {LCD_puts("up",1);
11
             }
12
       else 
13
      {LCD_puts("Case 1",1);
14
      }
15
   break;
16
17
   case 2:
18
       if(tast == DOWN)
19
         {LCD_puts("down",1);
20
          menutap = 3;
21
          }
22
       else if(tast == UP)
23
       {LCD_puts("up",1);
24
              menutap = 1;
25
                   }
26
       else 
27
      {LCD_puts("Case 2",1);
28
      }
29
     break;
30
  
31
    default : 
32
    menutap = 1;
33
    //LCD_puts("defaul",1);
34
    break;


Also eigentlich ganz einfach dachte ich. Aber es geht nicht. Warum? 
Welchen Fehler mache ich?
Die Taster sind über den Timer0 entprellt. Das funktioniert auch alles, 
wenn ich ein Taste drücke  wird die bezeichung der Taste auf dem LCD 
angezeit. Also wird der code ja durchlaufen, ausgeführt und die menutap 
müsste geändert werden. Aber er springt nicht ins ander Case um. Er 
bleibt immer in Case 1. Wenn ich menutap einen Wert gebe er in den Case 
und bleibt da.

Ich mache bestimmt so ein ganz doofen Anfängerfehler, oder?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> Wenn ich menutap einen Wert gebe er in den Case
> und bleibt da.

Erwartest Du, daß ohne erneute Auswertung von "menutap" nach einer 
Zuweisung innerhalb eines case-Zweiges automatisch in eine andere 
gesprungen wird?

Das funktioniert so nicht. Die Auswertung erfolgt genau einmal, danach 
wird der zugehörige case-Zweig angesprungen und ausgeführt. Eine 
Veränderung von "menutap" hat hier keinerlei Auswirkung mehr.

Damit sich das anders verhält, musst Du das ganze in eine Schleife 
packen (while/do..while) und erneut "menutap" auswerten.

von jabber (Gast)


Lesenswert?

Aber die Funktion wird doch ständig neu aufgerufen und die menutap 
ausgewertet. Dann springt er in den Case, führt den Code aus und ändert 
den menutap. Dann ist er fertig und die Funktion wird verlassen. Beim 
nächsten durchlauf müsste doch menutap einen andern wert haben und er so 
auch in ein anderes Case springen.

Oder bin ich jetzt total auf den Holzweg?

von Gast (Gast)


Lesenswert?

Hast du menutap als globale oder lokale Variable definiert?

von jabber (Gast)


Lesenswert?

Ist eine lokale Variable. Sie wird ja auch nur in der Funktion genutzt.

von Gast (Gast)


Lesenswert?

Wenn du die Variable lokal definiert hast und die Funktion verlässt 
verliert menutap (der Speciher wird wieder freigegeben) den vorher 
zugewiessenen Wert.

von jabber (Gast)


Lesenswert?

Super, vielen Danke! Es läuft zwar noch nicht richtig aber das bekomme 
ich jetzt hin, hoffe ich. Danke schön.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.