Ein "Stück" Quellcode wird nicht ausgeführt
-
Hallo, ich habe folgendes Problem:
Und zwar wird bei meinem Quelltext alle "for"-Anweisungen übersprungen:r1=Runde12->Count; r2=Runde22->Count; r3=Runde32->Count; fe=Fertig2->Count; TStringList* Speichern = new TStringList; if(SaveDialog1->Execute()==true) { Speichern->Add("1. Runde"+Edit3->Text+"2. Runde"+Edit3->Text+"3. Runde"+Edit3->Text+"Fertig"); for(;r1==r2; r2=Runde22->Count) { Runde22->Add(""); } for(;r1==r3; r3=Runde32->Count) { Runde32->Add(""); } for(;r1==fe; fe=Fertig2->Count) { Fertig2->Add(""); } for(int i=0; r1-1==i; i++) { Speichern->Add(Runde12->Strings[i]+Edit3->Text+Runde22->Strings[i]+Edit3->Text+Runde32->Strings[i]+Edit3->Text+Fertig2->Strings[i]); Edit4->Text="4"; } Speichern->SaveToFile(SaveDialog1->FileName+".xls"); }Das Programm soll(te) 4 verschiedene Listen, die unterschiedlich lang sein können, wobei aber die erste Liste am längsten, die zweite am zweitlängsten, usw. ist, und sie alle mit leeren Strings gleichlang machen.
Danach (die 4. For-Anweisung) soll es die 4 Listen in eine Schreiben, jeweils mit einem tabstop (=Edit3->Text) dazwischen, damit in der Excel-Tabelle jede Liste ihre eigene Zeile hat.Doch leider Überspringt es (nur) ALLE for-Anweisungen
. Weiß vllt einer von euch, WARUM???? 
-
Weil gilt:
r1 != r2
r1 != r3
r1 != fe
r1-1 != 0Durch diese Bedingungen werden alle deine for Schleifen übersprungen.
-
Die Bedingung in der C++ For-Schleife ist eine Laufbedingung, keine Abbruchbedingung.
Du hast also die Logik verquer.
-
Oh..

hab ich gar nicht bedacht...
Vielen Dank
-
Viel zu umständlich, lass die Standardbibliothek für dich arbeiten. Keine komischen eigenen Datentypen für Listen, die man dann auch noch auf dem Heap anlegt: Deine Beschreibung klingt nach std::vector. Außerdem sind strings automatisch erst einmal leer, wenn man nichts anderes sagt. Jede deiner Schleife kann daher durch ein einfaches resize ersetzt werden:
#include <vector> #include <string> #include <iostream> #include <algorithm> int main() { using namespace std; // Initialisierung hier mit C++11-Mitteln, damit das Beispiel nicht so lang wird vector<string> r1 = {"Bla", "Blupp", "Bi", "Ba", "Butzemann"}, r2 = {"Große", "gelbe", "Giraffen", "gucken", "gewöhnlich", "ganz", "glücklich"}, r3 = {"Da", "Da", "Da"}; // Oder Größe mit mehreren verschachtelten max feststellen, wenn man kein C++11 hat: size_t max_size = max({r1.size(), r2.size(), r3.size()}); // Neue Strings sind automatisch leer, daher kann man einfach resize nutzen: r1.resize(max_size); r2.resize(max_size); r3.resize(max_size); // Und noch eine Beispielausgabe for(size_t i = 0; i < max_size; ++i) cout << r1[i] << '\t' << r2[i] << '\t' << r3[i] << '\n'; }
-
TStringList sieht mir sehr nach Borland aus.