if-Anweisung und RadioGroup



  • hallo
    möchte gerne mit ner if anweisung eine radiogroup ansprechen. vorneweg ja ich weis das es mit ner switch anweisung einfacher ist und ja ich hab schon die hilfe benutzt. kann sein das ich für die cbuilder hilfe zu dumm bin aber die sagt mir nichts.

    if(RadioGroup1->ItemIndex = '0')
    {
     e = multiplikation(h,g);
    }
    if(RadioGroup1->ItemIndex = '1')
    {
     e = division(h,g);
    }
    if(RadioGroup1->ItemIndex = '2')
    {
     e = addition(h,g);
    }
    


  • Hallo!

    Was machst du da denn??

    Du WILLST ints mit char vergleichen - was soll das für einen Sinn haben?

    Und vergleichen tut man nicht mit = sondern mit == mit dem einfachen = macht man ne zuweisung...

    ALso

    if (RadioGroup1->ItemIndex == 5)
    {
      tuwas();
    }
    

    ciao
    Robert



  • 💡
    scheiße stimmt ja.
    jetzt mach ich schon das einfachste falsch.



  • Hier wäre wohl eher ein switch-case-Konstrukt das Mittel der Wahl...

    -junix



  • oder in der art...

    int x=RadioGroup1->ItemIndex; 
    e = (x==0)*multiplikation(h,g) + (x==1)*division(h,g) + (x==2)*addition(h,g);
    


  • wieso eigendlich '+' zwischen jeder bedingung. muss man nicht sagen: wenn x==0, 'oder' x==1, 'oder' x==2???

    wie stellt man eigendlich ein 'oder' zw. den bedingungen da (unabhängig ob das jetzt gefordert ist oder nicht)???



  • Hallo!

    mal jetzt abgesehen, dass ich auch der Meinung bin, dass hier switch besser wäre, weil leichter lesbar und einfacher zu debuggen....

    Schau mal:
    (x==0) gibt entweder 1 oder 0 zurück, oder?
    (x==1) das auch, oder? 1 oder 0 !
    (x==2) richtig, das auch! entweder 1 oder 0!

    demnach ist in dieser Anweisung:
    e = (x==0)*multiplikation(h,g) + (x==1)*division(h,g) + (x==2)*addition(h,g);
    nur einmal 1 * RECHENART... enthalten, oder?

    also wenn X gleich 1 dann sieht das ganze eigentlich so aus:
    e = 0*multiplikation(h,g) + 1*division(h,g) + 0*addition(h,g);

    demnach ergibt zwangsläufig nur 1+division(h,g) einen Wert ungleich 0 zurück, oder? und 500 + 0 + 0 bleibt bei 500, richtig? Damit hast du das Ergebnis!

    Im übrigen fällt mir gerade auf, dass diese Anweisung von Windarf FALSCH ist! (Logikfehler!)
    Nämlich: Bei jeder Rechenart kann "der 2. Parameter" eine 0 sein. Dividieren durch 0 funktioniert aber nicht! Das gibt ne schöne Fehlermeldung, auch wenn du gerade nicht dividierst, sondern z.B. mit einer 0 addierst!
    - und hinterher weiß keiner woher die kommt!

    Darum würde ich solche Spielchen, wie die von Windalf, eher lassen! Welchen Vorteil hat die eigentlich?? "Sparen" am Code, damit der nicht zu groß wird und nicht so große Festplatten nötig werden?? 😃

    tschüss
    Robert


Anmelden zum Antworten