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 einzelne char s) wäre std::map eine Möglichkeit.


  • Mod

    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 = &params;
    	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


Anmelden zum Antworten