Bedingungslose Konsolenapp - wie lass ich das Programm bis zum Benutzerendewunsch laufen?

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 29 Antworten in diesem Thema. Der letzte Beitrag () ist von Gregor Jasinski.

    Falls das an mich ging, dann hatte ich das schon in Post#10 geschrieben:

    VaporiZed schrieb:

    Klar, ich könnte ne bedingungslose Do-Loop verwenden und bei Programmendewunsch aufräumen und End aufrufen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Haudruferzappeltnoch schrieb:

    MinMaxParse […] sind aber noch gemogelt.
    Was ist daran gemogelt?

    Haudruferzappeltnoch schrieb:

    Hab noch was besseres
    Das ist ja eben auch das auf Dauer stackoverflow-Risiko, welches ich bereits in Post#1 erwähnt hatte

    VaporiZed schrieb:

    2. Am Ende der Main-Methode dieselbige einfach nochmal aufrufen, wenn das Programm nicht beendet werden soll. Wird aber beim 1000. Mal oder irgendwann eben zu nem stack overflow führen.
    Denn bei Deinem Vorschlag wird im krassesten Fall aufgerufen: Main -> AuswahlDerSubroutine -> GewählteSubroutine.Ende -> AuswahlDerSubroutine -> GewählteSubroutine.Ende -> …
    Das stapelt sich immer weiter - bis zum stack overflow.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Vaporized schrieb:

    Was ist daran gemogelt?

    Ja, ich weiß nicht genau wie ein "Extremum berechnen" implementiert ist, aber ich gehe stark davon aus, dass ist nur eine Dll, die in irgendeiner Weise If Funktionalität selbst nutzt.
    Also ja das Wort "If" ist nicht drin.
    Aber dann kann ich das auch für mein Auswahlkriterium selbst bauen. Mach ich ne dll für eine Funktion, die nicht "If" im Namen hat und dadrin unterscheide ich einfach die Fälle. Oder sehe ich das falsch?

    Ich habe versucht zu schauen was bei mir passiert, wenn ich da einige Routinen laufen lasse, nur die laufende Methode scheint da nicht schnell zu irgendwelchen Effekten zu führen. Aber meine Methoden sind halt auch quasi leer.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()

    @Haudruferzappeltnoch: Wie externe Funktionen wie Math.Max und Math.Min arbeiten, ist mir erstmal wurscht. Man kann das aber auch selbst ohne If, nämlich mathematisch lösen: Extremum-Formel und dafür den Betrag: Zahl quadrieren und dann Wurzel ziehen, also Dim AbsX = (x ^ 2) ^ .5

    @ErfinderDesRades: Tja, die Schleife ist ein derzeit verwendetes Übel. Ich hab den Thread aufgemacht, um kreative, praktische Vorschläge für das Problem zu bekommen, es muss ja keine Schleife sein, wenn es eine gute Alternative gibt. Wenn jemand eine gute Erklärung hat, gerne mit Beispielcode hat, wenn die Erklärung sehr theoretisch ist, wie ich das umsetzen kann, dann immer her damit.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:

    Tja, die Schleife ist ein derzeit verwendetes Übel. Ich hab den Thread aufgemacht, um kreative, praktische Vorschläge für das Problem zu bekommen, es muss ja keine Schleife sein, wenn es eine gute Alternative gibt.

    nocheinmal: Dein Ansinnen scheint mir paradox: Etwas soll sich immer wieder wiederholen, und irgendwann aber auch beenden.
    Das ist die Definition einer Schleife mit Ausstiegsbedingung - was solls da denn für eine Allternative geben können?
    End
    Environment.Exit(0)
    Try-Catch-Missbrauch
    Neustart der App

    Aber da es hier vermehrt noch um die Sinnhaftigkeit meines Vorhabens zu gehen scheint, bin ich hier erstmal fertig.
    Kreative Lösungsvorschläge werden natürlich trotzdem weiterhin gern gesehen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Nun ja, irgendwie werde ich hier auch nicht schlau.

    Aber eine Idee könnte eventuell das Abbrechen nach einer vorbestimmten Zeit sein. Vielleicht ist es aber auch komplett die falsche Richtung. Ich denke aber als Ansatz für neue Ideen wär's vielleicht auch noch gut.

    C#-Quellcode

    1. using (var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5)))
    2. {
    3. while (VielleichtDochNochNeBedingung && !cts.IsCancellationRequested)
    4. {
    5. //Deine was auch immer du wollen.
    6. //Code ...
    7. break;
    8. }
    9. }


    Freundliche Grüsse

    exc-jdbi
    Hier noch eine IF-Abfrage für eine beliebige Integerzahl ohne IF geschrieben zu haben und ohne Delegaten oder Subroutinen verwenden zu müssen – stattdessen wird dafür die Division-by-Null missbraucht - im Beispiel wird geprüft, ob die Eingabe = 15 ist. Wenn man so etwas in der Hand hat, kann man quasi jede Schleife, jedes Menü, Untermenü und vor allem auch die ganze Struktur des Programmablaufs samt kontrolliertem Exit machen. BTW, die Offsetbildung sollte auf jeden Fall auch in einem separaten oder geschachtelten Try-Catch-Block drin sein, da hier auch ein Überlauf im negativen Bereich passieren kann, wenn das Ergebnis der Differenz die untere negative Integergrenze überschreitet - das muss man dann auch entsprechend richtig herum abfangen. Wie schon zuvor, geht das nur mit Try-Catch-Blöcken, ohne Try-Catch muss man sich etwas anderes einfallen lassen.


    VB.NET-Quellcode

    1. Module Module1
    2. Sub Main()
    3. Dim DbyNull_Test As Integer = 1
    4. Dim Eingabe As Integer = 15 'Integer.MinValue 'nur zum Testen
    5. Dim Testzahl As Integer = 15 'Integer.MinValue 'nur zum Testen
    6. Try
    7. Dim Eingabe_Offset As Integer = Eingabe - Testzahl 'Offsetbildung
    8. DbyNull_Test = 1 \ Eingabe_Offset
    9. Console.WriteLine($"Die Eingabe war mit der Testzahl nicht identisch, daher ist sie <> {Testzahl}")
    10. Catch ex As Exception
    11. Console.WriteLine($"Die Eingabe war mit der Testzahl gleich und lautet {Testzahl}")
    12. End Try
    13. End Sub
    14. End Module
    Das gleichzeitige Erscheinen von Dummheit und Unmündigkeit nach Immanuel Kant ist eines der schlimmsten Dinge, die einem Homo sapiens in geistiger Hinsicht widerfahren können, hat manchmal aber auch durchaus seine Vorteile.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Gregor Jasinski“ ()