Doppelt verkettete Liste
-
Hallo
Das Programm wird Fehlerfrei kompiliert und startet auch.
Aber wenn ich das Programm mit dem Exe Button im debug-Ordner starte blinkt es nur kurz azf und ist weg, warum?[code] #include "stdafx.h" using namespace System; ref struct listenelement { String^ daten; listenelement^ next; listenelement^ previous; // Speichert die Vorgängeradresse }; // neues Element am Ende der der Liste eínfügen void einfuegen(String^ datenneu, listenelement^ listenanfang) { // ein Hilfshandle zum Wandern in der Liste listenelement^ hilfsHandle; // Hilfshandle an den Anfang der Liste setzen hilfsHandle = listenanfang; // ein Hilfshanele zum speichern der Vorgänger Adresse listenelement^ previousAdresse; // Durch die Liste gehen, bis das letzte Element erreicht ist while (hilfsHandle->next != nullptr) { hilfsHandle = hilfsHandle->next; } // die Aktuelle Adresse im Hilfshandle zwischen speichern previousAdresse = hilfsHandle; // neues Element erstellen hilfsHandle->next = gcnew listenelement; //Hilfshandle auf das neue Element setzen hilfsHandle = hilfsHandle->next; //Die Vorgängeradresse im neuen Hnadle speichern hilfsHandle->previous = previousAdresse; // Zeichenkette im neuen Element eintragen hilfsHandle->daten = datenneu; // nullptr wird automatisch gesetzt } // Alle Elemente der Liste ausgeben void ausgeben(listenelement ^listenanfang) { // ein Hilfshandle zum Wandern in der Liste listenelement ^hilfsHandle; // Hilfshandle an den Anfang der Liste setzen hilfsHandle = listenanfang; // erstes Element ausgeben Console::WriteLine("{0}",hilfsHandle->daten); // Soalange das Ende dr Liste noch nicht erreicht ist: //HilfsHandle auf das nächse Element setzen und die Daten ausgeben while (hilfsHandle->next != nullptr) { hilfsHandle = hilfsHandle->next; Console::WriteLine("{0}",hilfsHandle->daten); } } int main(array<System::String ^> ^args) { //Handle auf den Anfang der Liste listenelement ^listenanfang; //das erste Element per Hand erzeugen listenanfang = gcnew listenelement; //Zeichenkette in das erste Element schreiben //nullptr wird automatisch gesetzt listenanfang->daten="Element 0"; //in einer Schleife mehrere Elemente einfügen for (Int32 schleife=1;schleife<10;schleife++) einfuegen("Element "+schleife,listenanfang); //die Liste ausgeben ausgeben(listenanfang); return 0; }
[/code]
Vielen Dank im Voraus
-
Was sollte es auch sonst Deiner Meinung nach machen?
Das ist genau das, was Dein Programm macht. Es wird gestartet, gibt was aus und beendet sich. Was wundert Dich daran?
-
Heinerich schrieb:
Hallo
Das Programm wird Fehlerfrei kompiliert und startet auch.
Aber wenn ich das Programm mit dem Exe Button im debug-Ordner starte blinkt es nur kurz azf und ist weg, warum?[code] #include "stdafx.h" using namespace System; ref struct listenelement { String^ daten; listenelement^ next; listenelement^ previous; // Speichert die Vorgängeradresse }; // neues Element am Ende der der Liste eínfügen void einfuegen(String^ datenneu, listenelement^ listenanfang) { // ein Hilfshandle zum Wandern in der Liste listenelement^ hilfsHandle; // Hilfshandle an den Anfang der Liste setzen hilfsHandle = listenanfang; // ein Hilfshanele zum speichern der Vorgänger Adresse listenelement^ previousAdresse; // Durch die Liste gehen, bis das letzte Element erreicht ist while (hilfsHandle->next != nullptr) { hilfsHandle = hilfsHandle->next; } // die Aktuelle Adresse im Hilfshandle zwischen speichern previousAdresse = hilfsHandle; // neues Element erstellen hilfsHandle->next = gcnew listenelement; //Hilfshandle auf das neue Element setzen hilfsHandle = hilfsHandle->next; //Die Vorgängeradresse im neuen Hnadle speichern hilfsHandle->previous = previousAdresse; // Zeichenkette im neuen Element eintragen hilfsHandle->daten = datenneu; // nullptr wird automatisch gesetzt } // Alle Elemente der Liste ausgeben void ausgeben(listenelement ^listenanfang) { // ein Hilfshandle zum Wandern in der Liste listenelement ^hilfsHandle; // Hilfshandle an den Anfang der Liste setzen hilfsHandle = listenanfang; // erstes Element ausgeben Console::WriteLine("{0}",hilfsHandle->daten); // Soalange das Ende dr Liste noch nicht erreicht ist: //HilfsHandle auf das nächse Element setzen und die Daten ausgeben while (hilfsHandle->next != nullptr) { hilfsHandle = hilfsHandle->next; Console::WriteLine("{0}",hilfsHandle->daten); } } int main(array<System::String ^> ^args) { //Handle auf den Anfang der Liste listenelement ^listenanfang; //das erste Element per Hand erzeugen listenanfang = gcnew listenelement; //Zeichenkette in das erste Element schreiben //nullptr wird automatisch gesetzt listenanfang->daten="Element 0"; //in einer Schleife mehrere Elemente einfügen for (Int32 schleife=1;schleife<10;schleife++) einfuegen("Element "+schleife,listenanfang); //die Liste ausgeben ausgeben(listenanfang); return 0; }
[/code]
Vielen Dank im Voraus
Es müsste auch über den Button im debug-Ordner starten und die zehn Listeneinträge anzeigen, wie in Visual C++ 2005 Express Edition und das tut es nicht, das wundert mich und deshalb muss etwas falsch sein. Ich weis nicht was?
-
Heinerich schrieb:
Heinerich schrieb:
Hallo
Das Programm wird Fehlerfrei kompiliert und startet auch.
Aber wenn ich das Programm mit dem Exe Button im debug-Ordner starte blinkt es nur kurz azf und ist weg, warum?[code] #include "stdafx.h" using namespace System; ref struct listenelement { String^ daten; listenelement^ next; listenelement^ previous; // Speichert die Vorgängeradresse }; // neues Element am Ende der der Liste eínfügen void einfuegen(String^ datenneu, listenelement^ listenanfang) { // ein Hilfshandle zum Wandern in der Liste listenelement^ hilfsHandle; // Hilfshandle an den Anfang der Liste setzen hilfsHandle = listenanfang; // ein Hilfshanele zum speichern der Vorgänger Adresse listenelement^ previousAdresse; // Durch die Liste gehen, bis das letzte Element erreicht ist while (hilfsHandle->next != nullptr) { hilfsHandle = hilfsHandle->next; } // die Aktuelle Adresse im Hilfshandle zwischen speichern previousAdresse = hilfsHandle; // neues Element erstellen hilfsHandle->next = gcnew listenelement; //Hilfshandle auf das neue Element setzen hilfsHandle = hilfsHandle->next; //Die Vorgängeradresse im neuen Hnadle speichern hilfsHandle->previous = previousAdresse; // Zeichenkette im neuen Element eintragen hilfsHandle->daten = datenneu; // nullptr wird automatisch gesetzt } // Alle Elemente der Liste ausgeben void ausgeben(listenelement ^listenanfang) { // ein Hilfshandle zum Wandern in der Liste listenelement ^hilfsHandle; // Hilfshandle an den Anfang der Liste setzen hilfsHandle = listenanfang; // erstes Element ausgeben Console::WriteLine("{0}",hilfsHandle->daten); // Soalange das Ende dr Liste noch nicht erreicht ist: //HilfsHandle auf das nächse Element setzen und die Daten ausgeben while (hilfsHandle->next != nullptr) { hilfsHandle = hilfsHandle->next; Console::WriteLine("{0}",hilfsHandle->daten); } } int main(array<System::String ^> ^args) { //Handle auf den Anfang der Liste listenelement ^listenanfang; //das erste Element per Hand erzeugen listenanfang = gcnew listenelement; //Zeichenkette in das erste Element schreiben //nullptr wird automatisch gesetzt listenanfang->daten="Element 0"; //in einer Schleife mehrere Elemente einfügen for (Int32 schleife=1;schleife<10;schleife++) einfuegen("Element "+schleife,listenanfang); //die Liste ausgeben ausgeben(listenanfang); return 0; }
[/code]
Vielen Dank im Voraus
Es müsste auch über den Button im debug-Ordner starten und die zehn Listeneinträge anzeigen, wie in Visual C++ 2005 Express Edition und das tut es nicht, das wundert mich und deshalb muss etwas falsch sein. Ich weis nicht was?
tut es doch nur das DOS-Fenster wird halt automatisch wieder geschlossen, wenn sich das Programm beendet hat. Wenn du es aber über "ausführen" im Visual Studio machst, wird zusätzlich ein programm gestartet, welches am schluss deines Programms auf eine Tastatureingabe wartet um dann das Fenster zu schließen.
Entweder du baust so eine Abfrage in dein Programm ein, oder du öffnest erst die Eingabeaufforderung und startest dann von dort aus dein Programm.