dynamisch kleiner größer zeichen?
-
Hallo!
ich habe einen char* der heißt szIF. In diesem kann entweder < > oder = drin stehen. Muss ich jetzt 3 mal if machen if(!_tcscmp(szIF, TEXT("="))) und dann den kompletten Code in diesem if 3 mal schreiben? Oder kann ich irgendwie gleich machen if(oldvalue szIF newvalue)?
-
Schau dir mal
switch
an.Für Strings (
std::string
, nicht nur einzelnechar
s) wärestd::map
eine Möglichkeit.
-
Das klingt irgendwie merkwürdig, was genau hast du denn vor? Vielleicht gibt es allgemein einen besseren Ansatz.
-
"dynamisch" schreit meistens nach "Indirektion" (also, Zeiger, virtuelle Funktionen, ...).
Du könntest zB einen Funktionszeiger benutzen:
bool less (int a, int b) {return a<b;} bool greater(int a, int b) {return a>b;} typedef bool cmpfun_t(int,int); cmpfun_t* dings(char c) { switch (c) { case '<': return &less; default : return &greater; } } bool beispiel(char c) { int a = 23; int b = 42; cmpfun_t* pf = dings(c); return pf(a,b); }
Gruß,
SP
-
ich poste mal den Code damit ihr wisst was ich mache:
Params *a1 = ¶ms; unsigned currentHPMPFPValue = 0; PLAYER_INFO p1; while(*a1->stopThread == false) { try { p1 = GetPlayerInfo(); } catch (int) { while(GetValue() == 0) Sleep(100); continue; } if(!_tcscmp(a1->mpHPorFP, TEXT("HP1"))) currentHPMPFPValue = p1.currentHP; else if(!_tcscmp(a1->mpHPorFP, TEXT("HP2"))) currentHPMPFPValue = p1.currentHP; else if(!_tcscmp(a1->mpHPorFP, TEXT("MP"))) currentHPMPFPValue = p1.currentMP; else if(!_tcscmp(a1->mpHPorFP, TEXT("FP"))) currentHPMPFPValue = p1.currentFP; // entscheidender Code: // ich reagiere in den ifs immer genau gleich if(!_tcscmp(a1->szIF, TEXT("="))) { if(currentHPMPFPValue == a1->value) { // ganz viel Code } } else if(!_tcscmp(a1->szIF, TEXT("<"))) { if(currentHPMPFPValue < a1->value) { // ganz viel Code } } else if(!_tcscmp(a1->szIF, TEXT(">"))) { if(currentHPMPFPValue > a1->value) { // ganz viel Code } } Sleep(50); } delete params; _endthread();
-
||
-
wie soll das mit || funzen?
Wenn ich if(!_tcscmp(a1->szIF, TEXT("=")) ||< ||> (natürlich mit richtiger syntax) mache, dann kommt in der nächsten Zeile
if(currentHPMPFPValue == a1->value)
und es ist ja nur bei = == bei < muss bei dem 2. if das kleiner Zeichen stehen.
Hoffe du verstehst mich
-
Manfredd schrieb:
wie soll das mit || funzen?
Zum Beispiel so:
if (!_tcscmp(a1->szIF, TEXT("=")) && currentHPMPFPValue == a1->value || !_tcscmp(a1->szIF, TEXT("<")) && currentHPMPFPValue < a1->value || !_tcscmp(a1->szIF, TEXT(">")) && currentHPMPFPValue > a1->value)
Einleuchtend, oder?
Edit: Argh, verdammte Klammern...
-
lol danke, ich denk wohl zu sehr an komplexe Methoden :o