[C++ Builder 6] geht nicht in for-schleife

Krany

Mitglied
Hi
hab ein Problem, ich will zu einem StringGrid einen Wert hinzufügen lassen mit einer Prüfung, ob der Eintrag nicht schon vorhanden ist. Diese Prüfung hab ich in Form einer For-Schleife realisiert und ganz an den Anfang der Funktion ButtonClick geschrieben, das Problem ist aber, dass er die Schleife nur einmal aufruft und zwar bei der ersten Verwendung des Buttons, bei jedem weiteren verwenden überspringt er die Schleife.

noch einmal kurz und knapp für alle die noch nicht wissen worum es geht:

Programmstart -> Klick auf Button hinzufügen -> Tippe Werte ein -> klick auf endgültiges hinzufügen -> jetzt sollte er per For-Schleife prüfen ob es den Eintrag schon gibt oder nicht, doch er tut dies nur beim ersten neuen Eintrag, bei allen weiteren üerspringt er die Schleife.

Hier der Code:
Code:
void __fastcall Taddgame::Button1Click(TObject *Sender)
{
for (l=0;l==z;l++)                             //l und z sind lokale variablen z-> zeilenvariable ; l-> laufvariable
{
        if (Edit1->Text == Form2->StringGrid1->Cells[0][l])  //Vergleich Edit1 mit der Spalte 0 und Zeile l der Datenbank-Tabelle
        {
                Form2->Visible = true;
                addgame->Visible = false;
                Form2->Enabled = true;
        }
        Form2->Label1->Caption = l;          //Anzeige der Variable in einem label des hauptformulars zur Kontrolle
}
if (z>=11)
{
        Form2->StringGrid1->RowCount++;
}
Form2->StringGrid1->Cells[0][z] = Edit1->Text;
Form2->StringGrid1->Cells[2][z] = Edit2->Text;
Form2->StringGrid1->Cells[3][z] = Edit3->Text;
switch (ComboBox1->ItemIndex)
{
        case 0:  Form2->StringGrid1->Cells[4][z] = "Action"; break;
        case 1:  Form2->StringGrid1->Cells[4][z] = "Action-Adventure"; break;
        case 2:  Form2->StringGrid1->Cells[4][z] = "Action-Rollenspiel"; break;
        case 3:  Form2->StringGrid1->Cells[4][z] = "Adventure"; break;
        case 4:  Form2->StringGrid1->Cells[4][z] = "Aufbau-Strategie"; break;
        case 5:  Form2->StringGrid1->Cells[4][z] = "Denkspiel"; break;
        case 6:  Form2->StringGrid1->Cells[4][z] = "Echtzeit-Strategie"; break;
        case 7:  Form2->StringGrid1->Cells[4][z] = "Ego-Shooter"; break;
        case 8:  Form2->StringGrid1->Cells[4][z] = "Flugsimulation"; break;
        case 9:  Form2->StringGrid1->Cells[4][z] = "Fun-Game"; break;
        case 10:  Form2->StringGrid1->Cells[4][z] = "Mehrspieler-Shooter"; break;
        case 11:  Form2->StringGrid1->Cells[4][z] = "Rennspiel"; break;
        case 12:  Form2->StringGrid1->Cells[4][z] = "Rollenspiel"; break;
        case 13:  Form2->StringGrid1->Cells[4][z] = "rundenbasierende Strategie"; break;
        case 14:  Form2->StringGrid1->Cells[4][z] = "sonstige Simulation"; break;
        case 15:  Form2->StringGrid1->Cells[4][z] = "Sportspiel"; break;
        case 16:  Form2->StringGrid1->Cells[4][z] = "Wirtschaftssimulation"; break;
}
z++;
Form2->Label2->Caption = z;                  //Anzeige der Variable in einem label des hauptformulars zur Kontrolle
statusg++;
if ((Edit1->Text == "") && (Edit2->Text == "") && (Edit3->Text == "") && (ComboBox1->ItemIndex == -1))
{
        z--;
        statusg--;
}
Form2->StatusBar1->Panels->Items[1]->Text = IntToStr (statusg);
addgame->Visible = false;
Form2->Enabled = true;
}
 
Ich hab zwar keine Ahnung von C++ Builder 6, aber hast du da schon mal mit dem debugger vorbeigeschaut?
Code:
for (l=0;l==z;l++)       //l und z sind lokale variablen z-> zeilenvariable ; l->laufvariable
{
  ....

}
Die Schleife läuft solange l GLEICH z ist (l==z) und das ist warscheinlich nur 1 einziges mal der Fall, ich weiß ja net was in z drinsteht, bzw. wo es verändert ist.

Gruss Homer
 
Hi
das Problem ist ja, das z beim formularinitialisirung auf 0 gestzt wird und dann bei jedem eintrag und 1 erhöht wird, damit also immer eine zeile tiefer geschrieben wird.
und da l bei aufruf der for-schleife 0 wird und immer um eins erhöht wird, sollte das ereignis l==z immer eintreten (l und z --> Integer).
vielleicht habe ich ja den kopf der schleife flasch verstanden, keine Ahnung hab die syntax durch die hilfe bekommen. Also ich verzweifle irgendwie daran.
 
In diesem Falle solltest du aber Schreiben:
Code:
for(l=0; l<z; l++)
{
  ...
}
Pseudo Code:
- Setzte l gleich 0
- solange l kleiner als z
- erhöhe l um 1 nach jedem Durchlauf

Gruss Homer
 
Zurück