switch/case

newbie89

Mitglied
hi,
habe ein Problem

Code:
int main(void)                                                                      // Hauptprogramm


{
    
    eingabe();                                                                     // Aufruf Funktion: Eingabe
    berechnung();
   
  switch(auswahl=getchar());
            case'1': { auswahl1()  };
  
    system("PAUSE");	
    return 0;
}

Dabei soll auswahl1 eine funktion sein geht aber nicht mit Fehler:
case label not within a switch statement
 
Funktioniert einwandfrei bei Beachtung der Syntax.

C++:
int main(int argc, char* argv[])
{
	eingabe();                                                                    
	berechnung();
	char auswahl;
   
	switch(auswahl=getchar())
	{
		case'1': { auswahl1();  }
	}
  
    system("PAUSE");	
	return 0;
}
 
Zuletzt bearbeitet von einem Moderator:
Code:
int auswahl=0;
int main(void)                                                                      // Hauptprogramm


{
    
    eingabe();                                                                     // Aufruf Funktion: Eingabe
    berechnung();
    
  if (C!=0)  
   {
     printf("Auswahl: Kostenoptimiert <1> oder Technisch-Optimal <2>\n\n");
     do

       {
          switch(auswahl=getchar())
            
            case '1':   {auswahl1();
                         break; 
                         } 
             
             case '2':   {auswahl2();
                        }break;                           
                                      
            
                          
                           
                                    
       } while (auswahl!=1 && auswahl !=2); 
    }
    
    system("PAUSE");	
    return 0;

}

Hier kommt nun der Fehler case label not within a switch statement .
Wo ist denn hier der Fehler das Break brauch ich doch das er aus der Schleife hüpft?
 
Code:
int auswahl=0;
int main(void)                                                                      // Hauptprogramm


{
    
    eingabe();                                                                     // Aufruf Funktion: Eingabe
    berechnung();
    
  if (C!=0)  
   {
     printf("Auswahl: Kostenoptimiert <1> oder Technisch-Optimal <2>\n\n");
     do

       {
          switch(auswahl=getchar())
            { // <------ Klammer auf
            case '1':   {auswahl1();
                         break; 
                         } 
             
             case '2':   {auswahl2();
                        break; 
                        }        // <-- Klammer nach dem Break
              }  // <------- Klammer zu                       
            
                          
                           
                                    
       } while (auswahl!='1' && auswahl !='2'); // <-- Vergleich auf char-Werte
    }
    
    system("PAUSE");	
    return 0;

}

Geschweifte Klammern sollten helfen.
 
Zuletzt bearbeitet:
Hallo,

schau dir die Syntax von switch doch mal genau an. Die einzelnen Fälle müssen in { } eingeschlossen sein. Bei einem break wird hier nicht die Schleife verlassen, sondern auf die Stelle nach dem switch-Statement gesprungen. Die Abbruchbedingung der Schleife ist übrigens falsch (1 ist nicht gleich '1').

Grüße,
Matthias
 
Aus dem selben Grund, warum du auch case '1' und nicht case 1 schreibst. ;)

Mit auswahl=getchar() liesst du ja ein Zeichen/Char von der Tastatur ein.
Da auswahl ein int ist, wird dort nicht 1 sondern der Wert für das Zeichen 1, müsste glaub ich dezimal betrachtet 49 sein, gespeichert.

Du könntest also im Prinzip auch auswahl != 49 schreiben, da '1' == 49 ist (unter der Voraussetzung das ich die ASCII-Tabelle richtig im Kopf hab....).
 
Ich komm im Moment nicht weiter.

wenn ich jetzt z.B. haben möchte dass ich aus der switch Sache raus komme,
(z.B. es gint jemand eine 3 ein )
nehme ich dann am Besten einen default anstatt case und schreibe in diese default Anweisung break rein oder wie macht man das am Besten

Viele Grüße newbie
 
Zurück