C# Programm öffnet sich nach Beenden wieder

MarshallMathers

Lt. Commander
Registriert
Sep. 2016
Beiträge
1.250
Hallo,

Ich habe ein kleines Problem. Ich habe mit Visual Studio Community 2017 und der Programmiersprache C# einen kleinen Taschenrechner programmiert, der nur zwei Werte verrechnet. Wenn ich das Programm nach dem Ausführen nun aber beende, öffnet es sich sofort wieder und wird nochmal ausgeführt.
Hat hier jemand eine Idee wie ich das verhindern kann?

- Marshall
 
Ohne Code kann man nicht sagen was du da fabriziert hast, normal ist das Verhalten nämlich nicht, muss also was sein das du im Code gemacht hast.
 
Startest du es im debug Modus aus dem Studio? Wenn ja einfach auf Stop drücken wenn dein Programm fertig ist
 
Ist der Code wirklich wichtig? Es kommt nicht auf den Code an, schließlich passiert das bei jedem Code, den ich bis jetzt geschrieben habe. Ich dachte es wäre eine Eigenheit von Visual Studio, war aber verwirrt, als es dann auch in der fertigen ausführbaren Datei passierte.
 
Zeig uns mal deinen Code 😁 wer weiß.... vielleicht schreibst du alles in einer while-Schleife 😂. Kannst das was du hast ja mal auf pastebin posten und hier verlinken
 
Eh? Nein, das nicht.
Okay, hier:

https://pastebin.com/v6E0dQvk

Vielleicht ist das der schlechteste Code, den ihr jemals gesehen habt, aber ich stehe ja auch noch ganz am Anfang.
Und während der Prüfungszeit bleibt einfach so wenig Zeit zum Programmieren übrig.
 
Zuletzt bearbeitet:
MarshallMathers schrieb:
Vielleicht ist das der schlechteste Code, den ihr jemals gesehen habt, aber ich stehe ja auch noch ganz am Anfang.
Mach Dir keine Sorgen, jeder ist irgendwann ein Anfänger. :)

Der Code an sich ist in Ordnung, bis auf:
Code:
if (Userinput == "") {
  Console.WriteLine("Fehler. Bitte geben sie eine Zahl ein.\n");
  Second();
  int Nummer = Convert.ToInt32(Userinput);
...
drückt man bei der Abfrage einfach Return ruft sich die Funktion selbst nochmal auf, versucht danach aber den leeren UserInput in eine Zahl zu konvertieren.

Aber das Programm wird nur einmal ausgeführt und beendet dann bei mir.

Dein eigentliches Problem muss irgendwie in den Projekteinstellungen liegen.
Du könntest ja mal den ganzen Ordner in ein Zip-Archiv packen und hier als Anhang posten oder bei PasteBin o.ä hochladen.

So würde ich den Code schreiben, er z.B hat abfragen ob eine gültiger Operator gewählt wurde, ob wirklich Zahlen eingeben wurden ...
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Taschenrechner {
    class Program {
        static void Main(string[] args) {
            Print("Taschenrechner v1.2\n");

            String[] strOperators = { "Addition", "Subtraktion", "Multiplikation", "Division" };
            int Operation = OperatorEingabe();
            Print(strOperators[Operation-1] + "\n");

            int IntegerZahl1 = 0;
            do { Write("Ihre erste Zahl: "); }
            while (!Int32.TryParse(Console.ReadLine(), out IntegerZahl1));

            int IntegerZahl2 = 0;
            do { Write("Ihre zweite Zahl: "); }
            while (!Int32.TryParse(Console.ReadLine(), out IntegerZahl2));

            int Ergebnis = 0;
            switch (Operation) {
                case 1:
                    Ergebnis = IntegerZahl1 + IntegerZahl2;
                    break;
                case 2:
                    Ergebnis = IntegerZahl1 - IntegerZahl2;
                    break;
                case 3:
                    Ergebnis = IntegerZahl1 * IntegerZahl2;
                    break;
                case 4:
                    Ergebnis = IntegerZahl1 / IntegerZahl2;
                    break;
            }

            Print("Das Ergebnis: " + Ergebnis);

            Print("\n\nEnter, um zu beenden.");
            Console.ReadKey();
        }

        static int OperatorEingabe() {
            int Operation = 0;
            Print("Bitte wählen sie eine mathematische Operation:");
            Print("---------------------------");
            Print("Addition          [1]");
            Print("Subtraktion       [2]");
            Print("Multiplikation    [3]");
            Print("Division          [4]");
            Print("---------------------------");

            do {
                Write("Ihre Eingabe: ");
                Int32.TryParse(Console.ReadLine(), out Operation);
            }
            while (Operation <= 0 || Operation > 4);

            return Operation;
        }

        static void Print(String strText) {
            Console.WriteLine(strText);
        }

        static void Write(String strText) {
            Console.Write(strText);
        }
    }
}
 
Danke für die Antwort :)
Ja, mit dem Code war ich auch nicht glücklich, und die Probleme waren mir bewusst, aber ich habe einfach noch nicht die Fähigkeiten, den Fehler zu beheben. Dein Code sieht natürlich viel besser aus. Ich komme ja eigentlich aus der Python-Ecke, wollte jetzt aber eine neue Programmiersprache ausprobieren (Auch, um vom imperativen Programmieren weg zu kommen).
Wie lange programmierst du schon in C#, wenn ich fragen darf?
 
MarshallMathers schrieb:
Wie lange programmierst du schon in C#, wenn ich fragen darf?
C# seit etwa 10 Jahren, davor Java seit '97 was sehr ähnlich ist, C# finde ich aber besser. :)
Vergiss nicht deinen Projektordner hochzuladen um das Doppelstart-Problem zu finden.
 
Man könnte da auch noch eine Methode schreiben um die Eingabe der Operanden nicht doppelt implementieren zu müssen.
Auch das Berechnen des Ergebnisses würde ich in eine Methode auslagern um die Main Methode möglichst sauber zu halten.
Code:
using System;

namespace Taschenrechner
{
    public enum Operationen
    {
        Addition,
        Subtraktion,
        Multiplikation,
        Division
    }

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Taschenrechner v1.2\n");
            Operationen operation = OperatorEingabe();
            Console.WriteLine(operation + "\n");
            int IntegerZahl1 = OperandEingabe("Ihre erste Zahl:  ");
            int IntegerZahl2 = OperandEingabe("Ihre zweite Zahl: ");
            int Ergebnis = Berechne(operation, IntegerZahl1, IntegerZahl2);
            Console.WriteLine("Das Ergebnis: " + Ergebnis);
            Console.WriteLine("\n\nEnter, um zu beenden.");
            Console.ReadKey();
        }

        static int Berechne(Operationen operation, int operandA, int operandB)
        {
            switch (operation)
            {
                case Operationen.Addition: return operandA + operandB;
                case Operationen.Subtraktion: return operandA - operandB;
                case Operationen.Multiplikation: return operandA * operandB;
                case Operationen.Division: return operandA / operandB;
                default: throw new NotImplementedException();
            }
        }

        static int OperandEingabe(string text)
        {
            int input = 0;
            do { Console.WriteLine("Ihre erste Zahl: "); }
            while (!Int32.TryParse(Console.ReadLine(), out input));
            return input;
        }

        static Operationen OperatorEingabe()
        {
            Console.WriteLine("Bitte wählen sie eine mathematische Operation:");
            Console.WriteLine("---------------------------");
            Console.WriteLine("Addition          [1]");
            Console.WriteLine("Subtraktion       [2]");
            Console.WriteLine("Multiplikation    [3]");
            Console.WriteLine("Division          [4]");
            Console.WriteLine("---------------------------");
            int input = 0;
            do
            {
                Console.WriteLine("Ihre Eingabe: ");
                Int32.TryParse(Console.ReadLine(), out input);
            } while (input <= 0 || input > 4);
            return (Operationen)input - 1;
        }
    }
}

EDIT:
Achja und einen Enum für die Operationen einführen.
 
Zuletzt bearbeitet:
Zurück
Oben