C++ Brauche Hilfe mit Switch case Befehl

*Freak*

Lieutenant
Registriert
Feb. 2009
Beiträge
824
So,
mein Problem ist, dass ich mit dem switch case Befehl keine Wörter in Zahlen umwandeln kann...

z.b bei einen Programm womit ich den Widerstand anhand der Farbringe errechnen kann, will der switch case keine Wörter sonder nur Zahlen nehmen...

int schwarz,braun.... usw. ;

......
cout<<" __ _ _ _ __ "; cout<<endl;
cout<<" --|__|_|_|_|__|-- "; cout<<endl;
cout<<" ^ ^ ^ ^ "; cout<<endl;
cout<<" 1 2 3 4 "; cout<<endl;
cout<<" Welche Farbe hat der 1. Ring?";

cin>>ring1;

switch (ring1)
{
case "schwarz": cout<<"0"; break;
case "braun": cout<<"1";break;
case rot: cout<<"2";break;
case orange: cout<<"3";break;
case gelb: cout<<"4";break;
case gruen: cout<<"5";break;
case blau: cout<<"6";break;
case violett: cout<<"7";break;
case grau: cout<<"8";break;
case weiss: cout<<"9";break;
default: cout<<"Schreib statt Lila violett, nimm gruen oder weiss!";

wenn ich es probehalber das Programm starten will kommt folgende Fehlermeldung : E2313 Konstantenausdruck erforderlich Compiler-Fehler
Dieser Fehler wird häufig durch einen Tippfehler in einer #define-Konstanten verursacht.

Hättet ihr ein Lösungsansatz für mich? Bin in Programmieren nicht so toll :(
 
okay danke
werde ich mir mal anschauen...hab jetzt keine lust mehr iwas zu machen ^^
 
mit switch kannst du nur arbeiten, wenn es sich dabei um integer-werte handelt. also
Code:
  int n
  cin >> n;
  switch( n )
  {
    case 0 : ... break;
    case 1 : ... break;
    case 2 : ... break;
    default : ...
  }
strings kannst du nur mittels if und strcmp() (ansi variante) bzw. wcscmp() (widechar variante) vergleichen.
 
Jo, genau.

Switch is recht gut für eingaben in irgendwelchen Menüs oder so.
ZB auswahl 1, 2, 3, 4 etc und so quatsch (so hab ich es bisher immer verwendet). Ist halt recht übersichtlich und einfach zu programmieren, kann aber halt auch net soo viel :D
 
claW. schrieb:
mit switch kannst du nur arbeiten, wenn es sich dabei um integer-werte handelt.
Genauer gesagt kann switch momentan nur auf ordinalen Typen arbeiten, also Zeichen (char), Ganzzahlen (int) oder Enums. Gleitkommazahlen oder eben Strings sind nicht möglich. Der Workaround für solche Sachen sind if/else Konstrukte.
 
Du kannst auch nen switch nach Anfangsbuchstaben (ring1[0] und dann case 's', case 'b' usw.) machen. Die meisten Farben gehen dadurch mit dem switch direkt, bei gelb, grün und grau musst halt dann noch strcmp im case laufen lassen. Das ist dann sozusagen eine Hashtable für Arme ;)
 
mensch183 schrieb:
... oder Hash-Tabellen, falls es sehr viele Möglichkeiten gibt und Performance eine Rolle spielt.
Ist natürlich auch eine Möglichkeit. Wir wollen doch aber bei praxistauglichen Tipps bleiben. Ich denke nicht, dass der TE sonderlich viel damit anfangen können wird, wenn die Basis der Sprache noch Probleme bereitet.
 
Code:
int GetColorFromString(char* ColorString)
{
  if(!strcmp(ColorString, "rot"))
    return 1;
  if(!strcmp(ColorString, "blau"))
    return 2;
  // ...
  return 0; // 0 = Unbekannte Farbe
}

So, du wirst sicher ja diese Abfrage Mehrfach benutzen.
Außerdem erspart es dir Arbeit bei der Ausgabe.
(Beispiel:)
Code:
int ColorOut = GetColorFromString(ring1) ;
(ColorOut != 0) ? (cout<<ColorOut<<endl) : (cout<<"Error: Unknown color"<<endl);
Finde ich persönlich übersichtlicher. ;x
 

Ähnliche Themen

  • Artikel
Antworten
5
Aufrufe
2.368
C++ Menü
Antworten
4
Aufrufe
1.157
Zurück
Oben