Entwickler-Ecke

Sonstiges (Delphi) - (Pascal) Prog nur durhc "exit" beenden


Allack - Fr 14.10.05 18:26
Titel: (Pascal) Prog nur durhc "exit" beenden
Tach auch!!

Bin absoluter Anfänger un hab folgendes Problem:


Wenn ich en Programm geschrieben hab, dass wieder von Anfang anfangen soll, wenn man zum Schluss nicht "exit" eingibt, wie kann ich dass am leichtesten machen? Gibt es einen Befehl in der Art:


Delphi-Quelltext
1:
2:
readln(ende); 
if (ende <> exit) then restart;


Das Hervorgehobene soll nun durch einen Befehl ersetzt werden, der das Programm von ganz vorne anfangen lässt. Ich brauch das, weil wir für die Schule ein Prog erstellen sollen, dass bestimmte Rechnungen macht. Leider wird das Prog immer nach der ausrechnung beendet, ohne das man das Ergebnis sehen kann. hab dann einfach readln an den Schluss gesetzt, dass es erst beim drücken von ENTER beendet wird. Jetzt will ich aber, dass man das Prog durch ENTER neu startet und durch "exit" beendet...


Danke für jegliche Hilfen!!!

Greetz, Allack

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt.


jasocul - Fr 14.10.05 18:32

Da du gerade erst anfängst, habt ihr vermutlich nur Bedingungen (if) gehabt. Was du aber brauchst, sind Schleifen (While..do oder repeat..until). Ein Beispiel mit While..do:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
ende := ''// Initialisierung
while ende <> 'exit' do // solange die Variable 'ende' nicht 'exit' als Inhalt hat, mache das was jetzt kommt.
begin
  // Dein eigentlicher Programmteil
  readln(ende);
end;


*jonas - Fr 14.10.05 18:33

Moin,
also ein Exit ist "fast" immer eine der schlechtesten unelegantesten lösungen.
Erzähl doch mal bitte was das für ein Projekt ist wo du eine
Endlosschleife einsetzt?

Kenne das nur übertragen von Client/Server anwendungen


GTA-Place - Fr 14.10.05 19:22

Also ich hab das so Verstanden, dass man "exit" eingeben muss,
um das Programm zu beenden und nicht, dass er eine Schleife mit exit; beenden will.

Um das Programm neuzustarten, kannst du dir mal Suche in der Entwickler-Ecke SHELLEXCUTE(); angucken.


Allack - Fr 14.10.05 19:25

Wir hamm auch schon verschiedene Schleifen behandelt. Hab auch schon mit ner Schleife dieses Problem behoben. Wollte nur wissen, ob es auch einfacher geht... Ob es einen Befehl gibt, der das Programm neu startet. Wenn das Programm "rechnung" heuißt, möglicherweise auch in der Form


Delphi-Quelltext
1:
program.rechnung.restart;                    


oder ähnlich. So wie man es zB in JavaScript einsetzt, um ein Script zu wiederholen:


Delphi-Quelltext
1:
if (ende != "exit") {rechnung()};                    


Amateur - Fr 14.10.05 19:33

also man schließt ein programm über form1.close wenn du in das form1.onclose shellexecute schreibst kannst du deine exe erneut starten. dort überpüfst du zum beispiel ob die checkbox restart angeklickt ist oder nicht. oder ob jemand exit eingegeben hat oder nicht. denn sonst kann man das programm nicht beenden. oder machst zwei buttons neustart und beenden. bei neustart wird exit true gesetzt. sowas kannste alles mit ner if abfrage im onclose überprüfen und dann mit shellexecute erneut starten.


GTA-Place - Fr 14.10.05 19:37

Genau. 2 Buttons in einer Konsolenanwendung. Er verwendet ReadLn(); falls dir das noch net aufgefallen ist.


Delete - Fr 14.10.05 19:43

Entweder ein ReadLn vor dem letzten End. oder starte das Programm mal aus der Konsole. ;)


jasocul - Fr 14.10.05 19:46

Oder man baut eine eigene Procedure, die man dort aufruft, wo ich oben:

Delphi-Quelltext
1:
// Dein eigentlicher Programmteil                    

geschrieben habe.


Amateur - Fr 14.10.05 19:50

wieso nimmt er kein form? is einfacher, er sieht das ergebnis und alles is gut. er kann es neu starten etc. pp. wir machen in der schule nur forms und gar keine konsolen. dann hätte er das prob net. und wenn es ein prog zur berechnung is wäre es eh einfacher das ganze mit edits aufzuziehn oder?


GTA-Place - Fr 14.10.05 19:50

user profile iconLuckie hat folgendes geschrieben:
Entweder ein ReadLn vor dem letzten End. oder starte das Programm mal aus der Konsole. ;)


Das hab ich jetzt nicht ganz verstanden, aber du kannst
mir ja mal per PN mitteilen, was du damit sagen wolltest :wink:


Allack - Sa 15.10.05 16:03

Ich mach ne Konsolenanwendung weil wir das in der Schule so euf bekommen haben... Wir machen erst seit diesem Schuljahr Programmieren und haben mit Pascal angefangen. Und irgendwann machen wir dann erst Delphi. Unser Lehere meint es is einfacher erst Pascal un dann Delphi zu machen...

Sonst würd ich auch lieber Grafikanwendunggen schreiben, aber momentan müssenw ir halt noch Konsolenprogs machen...


Delete - Sa 15.10.05 16:39

user profile iconGTA-Place hat folgendes geschrieben:
user profile iconLuckie hat folgendes geschrieben:
Entweder ein ReadLn vor dem letzten End. oder starte das Programm mal aus der Konsole. ;)


Das hab ich jetzt nicht ganz verstanden, aber du kannst
mir ja mal per PN mitteilen, was du damit sagen wolltest :wink:

Gazz einfach, wenn du ein Konnsolenprogramm aus dem Explorer startest, dann schließt sich die Konmsole sofort wieder nach dem es zu ende ist das Programm. Das ist sein Problem. Entweder er macht als letzte Zeile ein ReadLn, dann wartet das Programm noch auf eine Eingabe und ist somit erst zu ende, wenn die Eingabe erfolgt ist. Oder er macht einfach mal eine Konsole auf und starte das Programm direkt aus der Konsole. Da sich in diesem fall die Konsole nicht schließt, wenn das Programm zu ende ist, sollte er die Ausgabe noch zus ehen bekommen.

War das denn so schwer verständlich ausgedrückt? :roll:


GTA-Place - Sa 15.10.05 18:16

Achso. Ich dachte das sei irgendwie auf meinen Post bezogen so ironisch oder so... :wink:


Allack - So 16.10.05 15:17

Das mit readln am Schluss hab ich ja schon gemacht, steht auch in meiner Fragestellung so drin. Das Problem is, dass ich das Prog nochmal ausführen möchte, ohne es manuell wieder zu starten. Ich möchte, dass es nur beendet wird, wenn man ganz am Schluss "exit" eingibt. Gibt man was anderes oder gar ncihts ein, soll das Prog neu starten.


Gausi - So 16.10.05 15:20

Wie schon gesagt, du brauchst eine Schleife:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
repeat
  // dein ganzes Programm hier rein

  ende := 'weitermachen';
  readln(ende);    
until (ende = 'exit');
exit;


Allack - So 16.10.05 15:29

Das Problem wäre damit behoben... Danke an alle!!!

Allerdings hab ich noch nicht erfahren, ob es einen Befehl gibt, mit dem man ein Programm aus einem anderen Prog heraus starten kann. Ungefähr so wie man in JavaScript eine andere Funktion aufrufen kann:


Delphi-Quelltext
1:
if (eingabe == "prog2"){prog2()};                    


Gausi - So 16.10.05 15:32

Neue Frage, neuer Thread. Daher:

*closed*