Bitte angucken und helfen
-
ich habe ein problem.....
(nicht originalprogramm^^)int Braun = 2;
int Gelb = 3;
int Rot = 4;int main (void)
{
cout<<"Bitte gewünschte Farbe eingeben:"<<endl;
cout<<"Braun"<<endl;
cout<<"Gelb"<<endl;
cout<<"Rot"<<endl;string Ring1;
cin>>Ring1;}
Jetzt gebe ich z.B. Braun ein.....
wenn ich dann abfrage:cout<<Ring1
wird natürlich auch Braun ausgegeben.....
wie schaffe ich es, dass ich anstatt Braun den oben genannten integer wert ausgegeben bekomme?(ohne if-else )
-
switch-case?
-
Dieser Thread wurde von Moderator/in estartu aus dem Forum MFC (Visual C++) in das Forum DOS und Win32-Konsole verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
hansi_hinterseer schrieb:
switch-case?
sorry.. das ist ein schlechtes beispiel... genau das will ich umgehen...
kein switch-case und kein if-else...ich hab insgesamt 9 Ringe denen jeweils 12 Farben zugeordnet werden können....
wenn ich das alles mit if-else mach, sitz ich da nächste woche noch dran xD.wäre praktisch wenn jemand wüsste wie man einfach das eingegebene wort dem integer wert zuweisen kann. und das ganze kurz bitte
Danke im Vorraus
-
std::map< std::string, int >
-
THX 1138 schrieb:
std::map< std::string, int >
ja, genau sowas habe ich gesucht.... nur jetzt gibt es ein weiteres problem....
ich bin noch anfänger im prrogrammieren und weiß jetzt nicht wie ich es anwenden soll..... kann mir das noch einer erklären?Nochmal Danke im V-o-r-r-a-u-s^^
-
Soulpincher schrieb:
Nochmal Danke im V-o-r-r-a-u-s^^
Erstaunlich, was sich die Leute alles einfallen lassen, um voraus nicht korrekt schreiben zu müssen
*scnr*
-
CStoll schrieb:
Soulpincher schrieb:
Nochmal Danke im V-o-r-r-a-u-s^^
Erstaunlich, was sich die Leute alles einfallen lassen, um voraus nicht korrekt schreiben zu müssen
*scnr*
Danke für die konstruktive Bemerkung
-
Da mir keiner erklären kann wie ich "std::map< std::string, int >" anwenden kann, habe ich es mal mit switch-case versucht.... darauf kam dieser fehler:
switch (Ring1)
{
case 'Braun': Ring1=Braun;break;case 'Rot': Ring1=Rot;break;
case 'Orange': Ring1=Orange;break;
case 'Gruen': Ring1=Gruen;break;
case 'Blau': Ring1=Blau;break;
case 'Violett': Ring1=Violett;break;
case 'Grau': Ring1=Grau;break;
case 'Weiss': Ring1=Weiss;break;
}[cpp]
C:\Dokumente und Einstellungen\gast\test.cpp(183) : error C2450: switch-Ausdruck des Typs 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' nicht erlaubt
Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden
C:\Dokumente und Einstellungen\gast\test.cpp(184) : error C2015: Zu viele Zeichen in der Konstante
C:\Dokumente und Einstellungen\gast\test.cpp(188) : error C2015: Zu viele Zeichen in der Konstante
C:\Dokumente und Einstellungen\gast\test.cpp(188) : error C2196: Wert fuer case '0' wurde bereits verwendet
C:\Dokumente und Einstellungen\gast\test.cpp(190) : error C2015: Zu viele Zeichen in der Konstante
C:\Dokumente und Einstellungen\gast\test.cpp(190) : error C2196: Wert fuer case '0' wurde bereits verwendet
C:\Dokumente und Einstellungen\gast\test.cpp(194) : error C2015: Zu viele Zeichen in der Konstante
C:\Dokumente und Einstellungen\gast\test.cpp(194) : error C2196: Wert fuer case '0' wurde bereits verwendet
C:\Dokumente und Einstellungen\gast\test.cpp(198) : error C2015: Zu viele Zeichen in der Konstante
C:\Dokumente und Einstellungen\gast\test.cpp(198) : error C2196: Wert fuer case '0' wurde bereits verwendet
Fehler beim Ausführen von cl.exe.Daraus folgere ich mal das man switch case so nicht anwenden kann ;-)(oder doch?? wennn ja, wie?)
Kann man switch-case überhaupt mit ganzen Worten benutzen oder kann man nur einzelne Stellen abfragen?Danke im VORAUS
-
Na gut, dann etwas zum Thema (btw, meine obige Aussage war ernst gemeint):
switch-case funktioniert nur mit Ganzzahltypen als Auswahlkriterium (int in allen Variationen, char, enum's). Und Zeichen-Konstanten bestehen normalerweise nur aus einem Zeichen, deshalb sind die Ausdrücke 'Braun' etc. ungültig.
Für den Umgang mit map's empfehle ich mal einen Blick in meinen Magazin-Artikel "Aufbau der STL - Teil 1" (zu erreichen dort↓).
In Kurzfassung sieht das so aus:
map<string,int> Farbnummern; Farbnummern["Braun"]=Braun; Farbnummern["Rot"]=Rot; ... cout<<Farbnummern[Ring1]<<endl;
(die map<> kannst du einmal anlegen und dann beliebig oft nach Werten da drin suchen)
-
Ich poste am besten mal das ganze programm... dann könnt ihr mir genau sagen was ich einsetzen muss.... dann verstehe ich es vllt.
#include <iostream> #include <conio.h> #include <string> using namespace std; int main (void) { char Auswahl = 'X'; int Braun = 1; int Erg; int Ergebnis; cout<<"Moechten sie [W] die Widerstandszahl oder [F] die Farbcodierung eingeben?\n"<<endl; cin>>Auswahl; if (Auswahl == 'F') { cout<<"\nGeben sie die gewuenschte Anzahl der Ringe an (V = 4 oder R = 5)\n"<<endl; cin>>Auswahl; } string Ring1; string Ring2; string Ring3; string Ring4; string Ring5; switch (Auswahl) { case 'W': cout<<"Void";break; case 'V': cout<<"Geben sie bitte die Farbe des ersten Ringes an:\n\n"; cout<<"Braun"<<endl; cout<<"Rot"<<endl; cout<<"Orange"<<endl; cout<<"Gelb"<<endl; cout<<"Gruen"<<endl; cout<<"Blau"<<endl; cout<<"Violett"<<endl; cout<<"Grau"<<endl; cout<<"Weiss"<<endl; cin>>Ring1; cout<<"Geben sie bitte die Farbe des zweiten Ringes an:\n\n"; cout<<"Schwarz"<<endl; cout<<"Braun"<<endl; cout<<"Rot"<<endl; cout<<"Orange"<<endl; cout<<"Gelb"<<endl; cout<<"Gruen"<<endl; cout<<"Blau"<<endl; cout<<"Violett"<<endl; cout<<"Grau"<<endl; cout<<"Weiss"<<endl; cin>>Ring2; cout<<"Geben sie bitte die Farbe des dritten Ringes an:\n\n"; cout<<"Schwarz"<<endl; cout<<"Braun"<<endl; cout<<"Rot"<<endl; cout<<"Orange"<<endl; cout<<"Gelb"<<endl; cout<<"Gruen"<<endl; cout<<"Blau"<<endl; cout<<"Violett"<<endl; cout<<"Grau"<<endl; cout<<"Weiss"<<endl; cout<<"Gold"<<endl; cout<<"Silber"<<endl; cin>>Ring3; cout<<"Geben sie bitte die Farbe des vierten Ringes an:\n\n"; cout<<"Keine"<<endl; cout<<"Braun"<<endl; cout<<"Rot"<<endl; cout<<"Gruen"<<endl; cout<<"Blau"<<endl; cout<<"Violett"<<endl; cout<<"Gold"<<endl; cout<<"Silber"<<endl; cin>>Ring4;break; case 'R': cout<<"Geben sie bitte die Farbe des ersten Ringes an:\n\n"; cout<<"Braun"<<endl; cout<<"Rot"<<endl; cout<<"Orange "<<endl; cout<<"Gelbt "<<endl; cout<<"Gruen"<<endl; cout<<"Blau"<<endl; cout<<"Violett"<<endl; cout<<"Grau"<<endl; cout<<"Weiss\n\n"<<endl; cin>>Ring1; cout<<"\nGeben sie bitte die Farbe des zweiten Ringes an:\n\n"; cout<<"Schwarz"<<endl; cout<<"Braun"<<endl; cout<<"Rot"<<endl; cout<<"Orange"<<endl; cout<<"Gelb"<<endl; cout<<"Gruen"<<endl; cout<<"Blau"<<endl; cout<<"Violett"<<endl; cout<<"Grau"<<endl; cout<<"Weiss\n\n"<<endl; cin>>Ring2; cout<<"Geben sie bitte die Farbe des dritten Ringes an:\n\n"; cout<<"Schwarz"<<endl; cout<<"Braun"<<endl; cout<<"Rot"<<endl; cout<<"Orange"<<endl; cout<<"Gelb"<<endl; cout<<"Gruen"<<endl; cout<<"Blau"<<endl; cout<<"Violett"<<endl; cout<<"Grau"<<endl; cout<<"Weiss\n\n"<<endl; cin>>Ring3; cout<<"Geben sie bitte die Farbe des vierten Ringes an:\n\n"; cout<<"Schwarz"<<endl; cout<<"Braun"<<endl; cout<<"Rot"<<endl; cout<<"Orange"<<endl; cout<<"Gelb"<<endl; cout<<"Gruen"<<endl; cout<<"Blau"<<endl; cout<<"Gold"<<endl; cout<<"Silber\n\n"<<endl; cin>>Ring4; cout<<"Geben sie bitte die Farbe des fünften Ringes an:\n\n"; cout<<"Keine"<<endl; cout<<"Braun"<<endl; cout<<"Rot"<<endl; cout<<"Gruen"<<endl; cout<<"Blau"<<endl; cout<<"Violett"<<endl; cout<<"Grau "<<endl; cout<<"Gold"<<endl; cout<<"Silber\n\n"<<endl; cin>>Ring5;break; default :cout<<"Falsche eingabe";break; } /*Erg = Integer.parseInt(Ring1); Ergebnis = Integer.toString(Erg); */ return 0; }
also, die variablen sind noch nicht deklariert... aber es geht mir nur um die allgemeine funktion des programms und noch nicht um die genauen zahlen...
Ich muss den eingegebenen worten eine Zahl zuweisen und muss nachher damit rechnen.. if-else funktioniert nicht, switch-case auch nicht... und die vorschläge bis jetzt waren für mich noch unverständlich!
Nochmals danke und ich hoffe ihr könnt mir weiterhelfen!
-
Naja... bin sicher es funktioniert so... aber wie gesagt ich bin noch anfänger in der programmierung und das mit den maps verstehe ich nicht direkt
z.B:
map<string,int> Farbnummern;
Farbnummern["Braun"]=Braun;
Farbnummern["Rot"]=Rot;
...cout<<Farbnummern[Ring1]<<endl;
schreibt man da die Variablen in die Map rein oder ist das schon die Abfrage??
-
ups... hat gehangen jetzt ist es mehrmals drin^^
-
Mit den Anweisungen
Farbnummern["Braun"]=Braun;
etc. füllst du die map mit Wert(paar)en aus einem Schlüssel (in diesem Fall der String "Braun") und einem dazugehörigen Wert (hier die int-Konstante Braun=2). Die cout-Zeile sucht in der map nach dem Schlüssel Ring1 und gibt den zugehörigen Wert aus.(wie gesagt, lies mal im Magazin)
-
Also... ich verstehe nicht wie man die map anwendet, also wie man es schreiben muss damit auch alles funktioniert... Ich habe auch dein magazin gelesen,was bestimmmt auch hilfreich ist, aber wie gesagt, bin ich noch ein anfänger!
Kannst du mir vllt. genau sagen wie die map auszusehen hat wenn ich alle deklarationen angebe?
Schwarz = 0
Braun = 1
Rot = 2
Orange = 3
Gelb = 4
Gruen = 5
Blau = 6
Violett = 7
Grau = 8
Weiss = 9Ich weiß dass es ein bisschen unverschämt rüberkommt wenn ich jetzt frage ob du meine arbeit machen kannst, aber ich komme so absolut nicht weiter....
danke für deine hilfe
Greets Soulpincher
-
Im einfachsten Fall kannst du für jede Farbe eine Zuweisung ala
Farbnummern["Farbe"]=Farbe;
untereinander schreiben. Eleganter geht es, wenn du Hilfsarrays und STL-Algorithmen benutzt:void init_map(map<string,int>& data) { //in das Array schreibst du alle Kombinationen aus Farbname und Kennnummer pair<string,int> values[]= { make_pair("Schwarz",0), make_pair("Braun",1), ... }; int vsize=sizeof(values)/sizeof(values[0]); copy(values,values+vsize,inserter(data,data.begin()); } //im Hauptprogramm: map<string,int> Farbnummern; init_map(Farbnummern);
-
welche bibliothek muss man verwenden?
-
#include <iostream> #include <conio.h> #include <string> using namespace std; int main (void) { char Auswahl = 'X'; int Braun = 1; int Erg; int Ergebnis; int Rot = 1; void init_map(map<string,int>& data) { //in das Array schreibst du alle Kombinationen aus Farbname und Kennnummer pair<string,int> values[]= { make_pair("Schwarz",0), make_pair("Braun",1), make_pair("Rot",2), make_pair("Orange",3), make_pair("Gelb",4), make_pair("Grün",5), make_pair("Blau",6), make_pair("Violett",7), make_pair("Grau",8), make_pair("Weiss",9), }; int vsize=sizeof(values)/sizeof(values[0]); copy(values,values+vsize,inserter(data,data.begin()); } cout<<"Moechten sie [W] die Widerstandszahl oder [F] die Farbcodierung eingeben?\n"<<endl; cin>>Auswahl; if (Auswahl == 'F') { cout<<"\nGeben sie die gewuenschte Anzahl der Ringe an (V = 4 oder R = 5)\n"<<endl; cin>>Auswahl; } string Ring1; string Ring2; string Ring3; string Ring4; string Ring5; switch (Auswahl) { case 'W': cout<<"Void";break; case 'V': cout<<"Geben sie bitte die Farbe des ersten Ringes an:\n\n"; cout<<"Braun"<<endl; cout<<"Rot"<<endl; cout<<"Orange"<<endl; cout<<"Gelb"<<endl; cout<<"Gruen"<<endl; cout<<"Blau"<<endl; cout<<"Violett"<<endl; cout<<"Grau"<<endl; cout<<"Weiss"<<endl; cin>>Ring1; cout<<"Geben sie bitte die Farbe des zweiten Ringes an:\n\n"; cout<<"Schwarz"<<endl; cout<<"Braun"<<endl; cout<<"Rot"<<endl; cout<<"Orange"<<endl; cout<<"Gelb"<<endl; cout<<"Gruen"<<endl; cout<<"Blau"<<endl; cout<<"Violett"<<endl; cout<<"Grau"<<endl; cout<<"Weiss"<<endl; cin>>Ring2; cout<<"Geben sie bitte die Farbe des dritten Ringes an:\n\n"; cout<<"Schwarz"<<endl; cout<<"Braun"<<endl; cout<<"Rot"<<endl; cout<<"Orange"<<endl; cout<<"Gelb"<<endl; cout<<"Gruen"<<endl; cout<<"Blau"<<endl; cout<<"Violett"<<endl; cout<<"Grau"<<endl; cout<<"Weiss"<<endl; cout<<"Gold"<<endl; cout<<"Silber"<<endl; cin>>Ring3; cout<<"Geben sie bitte die Farbe des vierten Ringes an:\n\n"; cout<<"Keine"<<endl; cout<<"Braun"<<endl; cout<<"Rot"<<endl; cout<<"Gruen"<<endl; cout<<"Blau"<<endl; cout<<"Violett"<<endl; cout<<"Gold"<<endl; cout<<"Silber"<<endl; cin>>Ring4;break; case 'R': cout<<"Geben sie bitte die Farbe des ersten Ringes an:\n\n"; cout<<"Braun"<<endl; cout<<"Rot"<<endl; cout<<"Orange "<<endl; cout<<"Gelbt "<<endl; cout<<"Gruen"<<endl; cout<<"Blau"<<endl; cout<<"Violett"<<endl; cout<<"Grau"<<endl; cout<<"Weiss\n\n"<<endl; cin>>Ring1; cout<<"\nGeben sie bitte die Farbe des zweiten Ringes an:\n\n"; cout<<"Schwarz"<<endl; cout<<"Braun"<<endl; cout<<"Rot"<<endl; cout<<"Orange"<<endl; cout<<"Gelb"<<endl; cout<<"Gruen"<<endl; cout<<"Blau"<<endl; cout<<"Violett"<<endl; cout<<"Grau"<<endl; cout<<"Weiss\n\n"<<endl; cin>>Ring2; cout<<"Geben sie bitte die Farbe des dritten Ringes an:\n\n"; cout<<"Schwarz"<<endl; cout<<"Braun"<<endl; cout<<"Rot"<<endl; cout<<"Orange"<<endl; cout<<"Gelb"<<endl; cout<<"Gruen"<<endl; cout<<"Blau"<<endl; cout<<"Violett"<<endl; cout<<"Grau"<<endl; cout<<"Weiss\n\n"<<endl; cin>>Ring3; cout<<"Geben sie bitte die Farbe des vierten Ringes an:\n\n"; cout<<"Schwarz"<<endl; cout<<"Braun"<<endl; cout<<"Rot"<<endl; cout<<"Orange"<<endl; cout<<"Gelb"<<endl; cout<<"Gruen"<<endl; cout<<"Blau"<<endl; cout<<"Gold"<<endl; cout<<"Silber\n\n"<<endl; cin>>Ring4; cout<<"Geben sie bitte die Farbe des fünften Ringes an:\n\n"; cout<<"Keine"<<endl; cout<<"Braun"<<endl; cout<<"Rot"<<endl; cout<<"Gruen"<<endl; cout<<"Blau"<<endl; cout<<"Violett"<<endl; cout<<"Grau "<<endl; cout<<"Gold"<<endl; cout<<"Silber\n\n"<<endl; cin>>Ring5;break; default :cout<<"Falsche eingabe";break; } /*Erg = Integer.parseInt(Ring1); Ergebnis = Integer.toString(Erg); */ return 0; }
ich habs mal da hingezogen und gehofft das es stimmt...
jetzt kamen folgende fehler!Widerstandsfarbcodierung.cpp
F:\Schulprojekt\Widerstandsfarbcodierung.cpp(28) : error C2065: 'map' : nichtdeklarierter Bezeichner
F:\Schulprojekt\Widerstandsfarbcodierung.cpp(28) : error C2275: "string" : Ungültige Verwendung dieses Typs als Ausdruck
c:\programme\microsoft visual studio\vc98\include\xstring(612) : Siehe Deklaration von 'string'
F:\Schulprojekt\Widerstandsfarbcodierung.cpp(28) : error C2062: 'int'-Typ unerwartet
F:\Schulprojekt\Widerstandsfarbcodierung.cpp(29) : error C2143: Syntaxfehler : Fehlendes ';' vor '{'
F:\Schulprojekt\Widerstandsfarbcodierung.cpp(45) : error C2065: 'inserter' : nichtdeklarierter Bezeichner
F:\Schulprojekt\Widerstandsfarbcodierung.cpp(45) : error C2065: 'data' : nichtdeklarierter Bezeichner
F:\Schulprojekt\Widerstandsfarbcodierung.cpp(45) : error C2228: Der linke Teil von '.begin' muss eine Klasse/Struktur/Union sein
F:\Schulprojekt\Widerstandsfarbcodierung.cpp(45) : error C2143: Syntaxfehler : Fehlendes ')' vor ';'
Fehler beim Ausführen von cl.exe.
-
Erstens: Du kannst keine Funktionen (init_map()) in der main() definieren. Die Funktion muß schon eigenständig stehen.
Zweitens: Du benötigst natürlich noch den Header <map>, um eine map<> anlegen und verwenden zu können - und <iterator> für den Insert-Iterator, den die init-Funktion verwendet.
-
CStoll schrieb:
Erstens: Du kannst keine Funktionen (init_map()) in der main() definieren. Die Funktion muß schon eigenständig stehen.
Zweitens: Du benötigst natürlich noch den Header <map>, um eine map<> anlegen und verwenden zu können - und <iterator> für den Insert-Iterator, den die init-Funktion verwendet.
Naja... danke für deine hilfe, aber ich denke ich komme so nicht weiter...
Hat mich gefreut dich kennen zu lernen, aber ich denke jetzt reicht es....
mir fehlen zu viele kenntnisse um überhaupt ansatzweise mit dir reden zu können!Ich fang jetzt neu an ohne string
MfG