Einfache If-Schleife?!



  • Hallo, ich bin neu und programmiere noch nicht lange mit C++, hab jetzt aber ein Problem, dass ich nicht lösen kann.

    if (CheckBox1) {
    	int i2=2000;}else{
    		int i2=StrToInt(Edit2->Text);}
    

    /E: Klappt jetzt, habe den Quelltext geändert:

    {
    	int i2=5;
    	int i1=StrToInt(Edit1->Text);
    	if (CheckBox1) {
    		i2=800;}else{
    		i2=StrToInt(Edit2->Text);}
    	Beep(i1,i2);
    }
    

    Allerdings ändert er i2 nicht, wenn ich die Checkbox1 checke oder abwähle, wieso?

    Lieben Gruß



  • Die Ursache für den Fehler zeigst du nicht im Code. Die beiden Warnings meinen genau, was sie sagen. Du hast einer Variable einen Wert zugewiesen, den/die du nie verwendest. Der Compiler warnt, weil solche Stellen oft auf Schreibfehler hinweisen. Er meint also, dass du etwas geschrieben hast, das du gar nicht meinst.

    In deinem Fall vermute ich, dass du nicht verstehst, was jedes dieser Statments bewirkt: Du legst jedes Mal eine neue Variable an und weist ihr einen Wert zu. Wenn das Programm den Scope (die geschweifte Klammer-Ebene) verlässt, wird die Variable gelöscht. Vielleicht meinst du das:

    int i2;
    if (CheckBox1) {
       i2=2000;    // Verwendet die Variable i2 von oben
    }
    else {
       i2=StrToInt(Edit2->Text);  // dito
    }	
    
    // ...
    
    if(i2 == 2000) {
       // ...
    }
    

    Stefan.

    P.S.: Im Falle von if() spricht man übrigens nicht von "Schleife", sondern von "Bedingung".



  • Abgesehen von der grauslichen Formatierung und dem grauslichen Wort "If-Schleife" 👎 ,
    Du erschaffst eine Variable, die nach der "Schleife" weg ist. Du kannst sie nur in der "Schleife" nutzen. Willst Du sie auch danach noch nutzen, musst Du sie vorher deklarieren.
    also so (mit neuer fOrmatierúng):

    int i2 = 0;
    if (CheckBox1) {
        i2=2000;
    }
    else {
        i2=StrToInt(Edit2->Text);
    }
    //Hier kannst Du i2 weiter nutzen, bis die Funktion verlassen wird.
    

    EDIT: Man, bin ich langsam: zwei Leute schneller 😮



  • entweder über eine Fkt, die nen int zurückgibt(in abhängigkeit davon, ob die checkbox gesetzt ist) oder du nutzt den ternären operator(für programmieranfänger vll nicht unbedingt übersichtlich, aber ok^^):

    int get_foo()
    {
      if(CheckBox->checked())
        return 2000;
    
      return StrToInt(bar->Text());
    }
    
    //anwendung:
    
    int x = get_foo();
    

    oder

    int x = CehckBox->checked() ? 2000 : StrToInt(bar->Text());
    

    bb



  • Hey,
    Danke für die viele Hilfe, klappt jetzt.
    Juhu 😉

    Lieben Gruß.




Anmelden zum Antworten