Forum: PC-Programmierung switch Anweisung mit Variablen


von Ma B. (drumstick)


Lesenswert?

Stimmt es, dass der Case Ausdruck einer switch Anweisung eine Konstante 
sein muss, bzw. konstant sein muss??
1
switch(Dir)
2
{
3
4
    case Array[0]: printf("");
5
    break;
6
7
}


Dies funktioniert also nicht!??

Gruss und danke!

M.B.

von Krapao (Gast)


Lesenswert?

Vereinfacht: Beim Switch baut der Compiler beim Übersetzen mit Hilfe der 
CASE Werte eine Sprungtabelle für die einzelnen Fälle auf. Dafür müssen 
die Werte beim Kompilieren bekannt sein. Die Inhalte der Variablen sind 
erst zur Laufzeit bekannt.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

M. B. schrieb:
> Dies funktioniert also nicht!??

Kann es auch nicht, stell Dir mal folgende Situation vor:
1
int Array[3] = {0};
2
3
switch (Dir)
4
{
5
  case Array[0] :
6
    //
7
    break;
8
9
  case Array[1] :
10
    //
11
    break;
12
13
  case Array[2] :
14
    //
15
    break;
16
}

Da alle Elemente des Arrays den gleichen Wert haben, würde dann 
welcher case-Fall ausgeführt werden?

Nein, switch/case geht nur mit ganzzahligen Konstanten. Nicht mit 
float-Werten, nicht mit Strings, und erst recht nicht mit Variablen.

von Coder (Gast)


Lesenswert?

Abschließend die Empfehlung nochmals C Grundlagen aktualisieren.

von Mark B. (markbrandis)


Lesenswert?

switch (Array[0]) würde gehen wenn es ein Ganzzahl-Array ist (also char 
oder int, nicht float oder double). Vielleicht ist es das was der 
Themenersteller eigentlich will?

von Rolf Magnus (Gast)


Lesenswert?

Zunächst sollte man mal klären, um welche Sprache es eigentlich geht.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Rufus Τ. Firefly schrieb:
> Nein, switch/case geht nur mit ganzzahligen Konstanten. Nicht mit
> float-Werten, nicht mit Strings, und erst recht nicht mit Variablen.

Coder schrieb:
> Abschließend die Empfehlung nochmals C Grundlagen aktualisieren.

In PHP kann auch mit nicht konstanten Ausdrücken, mit beliebigen 
Datentypen und auch mehrdeutigkeiten gearbeitet werden (es wird dann der 
erste zutreffende Case gewählt) ich sehe nirgends das 'C' als Sprache 
genannt wurde...

Folgendes ist z.B. gültiges (wenn auch nicht schönes) PHP:
1
$section = $_GET['section'];
2
switch(true) {
3
 case ($section == "main"):
4
  echo "Welcome to main section";
5
  break;
6
 case ($section == "images"):
7
  echo "Look at this nice images";
8
  break;
9
 case ($section == "FAQ"):
10
  echo "Find frequently asked questions here";
11
  break;
12
 default:
13
  echo "The section ".$section." is unknown";
14
  break;
15
}

von Mark B. (markbrandis)


Lesenswert?

Rolf Magnus schrieb:
> Zunächst sollte man mal klären, um welche Sprache es eigentlich geht.

Schon. Die Verwendung von
1
printf("");

in genau dieser Syntax spricht allerdings schon sehr für C.

von Max (Gast)


Lesenswert?

Das PHP-Programmierer einen Schlag haben steht ja wohl außer Frage. Die 
Syntax im Beispiel des TO deutet bei den Sprachen mit nennenswerter 
Verbreitung wohl auf C/C++ hin.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Mark Brandis schrieb:
> in genau dieser Syntax spricht allerdings schon sehr für C.

PHP hat die gleich Syntax...
http://php.net/manual/de/function.printf.php

von Mark B. (markbrandis)


Lesenswert?

Müsste es in PHP nicht
1
switch($Dir)

heißen? Ist aber ne Weile her dass ich was in der Sprache gemacht hab. 
(ich war jung und brauchte das Geld ;-)

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Im Prinzip ja, es sei den 'Dir' wurde zuvor als Konstante definiert:
1
define("Dir", $dir);
2
switch(Dir) {
3
 ...
 ;-)

von Ma B. (drumstick)


Lesenswert?

Tag!

Ja, ich meinte C! Sorry!!

Dies mit den Variablen leuchtet mir ein, ist ja klar!

Danke und Gruss!

M.B.

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.