Satz des Pythagoras Rechner Die Eingabezeichenfolge hat das falsche Format

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 24 Antworten in diesem Thema. Der letzte Beitrag () ist von AProgrammer.

    Satz des Pythagoras Rechner Die Eingabezeichenfolge hat das falsche Format

    Gleich in der ersten Zeile kommt der Fehler das die Eingabezeichenfolge das falsche Format hat. Was ist falsch und wie kann ich das beheben ?
    Also ab: a = Convert.ToDouble(label4.Text);

    C#-Quellcode

    1. if (comboBox1.Text == "c² - Hypotenuse")
    2. {
    3. double a;
    4. double b;
    5. double ergebnisa2;
    6. double ergebnisb2;
    7. double ergebnisausaundb2;
    8. double Wurzelziehzahl;
    9. double Hauptergebnis;
    10. a = Convert.ToDouble(label4.Text);
    11. b = Convert.ToDouble(label5.Text);
    12. ergebnisa2 = Math.Pow(a, 2);
    13. ergebnisb2 = Math.Pow(b, 2);
    14. ergebnisausaundb2 = ergebnisa2 + ergebnisb2;
    15. Wurzelziehzahl = Math.Sqrt(ergebnisausaundb2);
    16. Hauptergebnis = Wurzelziehzahl + Convert.ToDouble(comboBox2.Text);
    17. textBox3.Text = Hauptergebnis.ToString();
    18. }
    Moin,

    dann ist die Value wohl ungültig. Mit Labels rechnet man btw nicht, sondern nur mit Variablen. Du solltest Deine Values übrigens richtig parsen, um genau sowas dann besser zu erkennen und zu behandeln.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Danke für die Antwort. Dein Tipp hat mir geholfen.
    Fehler gefunden! Habe ausversehen anstatt Textbox Label geschrieben...

    C#-Quellcode

    1. ​ a = Convert.ToDouble(textbox2.Text);
    2. b = Convert.ToDouble(textbox1.Text);

    So ist das richtig. Denn das besteht aus Chars, kein Wunder.

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

    Ich weiß nicht, woher Du Deinen Input beziehst, das schlauste wäre ein NumericUpDown, ansonsten müsstest Du via Double.TryParse parsen:

    VB.NET-Quellcode

    1. ​Dim inputValue As Double
    2. If Not Double.TryParse("InputString", inputValue) Then
    3. ' Eingabe war kaputt
    4. End If


    Und wie gesagt, den Wert niemals aus dem Label holen, das ist nur zum Anzeigen!
    Zeig' außerdem mal die Eingabe, damit man sehen kann, woran es liegt.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    AProgrammer schrieb:

    Textbox
    Oder Du nimmst gleich ein NumericUpDown, da kannst Du sogar im Validating-Event die Eergebnisse "online" ausgeben.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    AProgrammer schrieb:

    "online"
    im ValueChanged-Event des Controls.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    AProgrammer schrieb:

    Rückmeldung
    Ich führe keine solchen fremden Programme aus.
    Pack die Quellen in eine ZIP und nutze die Forumsfunktionalität:
    Erweitertze Antwort => Dateianhänge => hochladen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @AProgrammer
    Ich ebenfalls nicht. Aber wenn ich mir alleine die drei Bilder ansehe, wo du die Katheten in Paint mit dem STIFT (nicht mal der Linien-Funktion) nachgezeichnet hast, und du in das 32x32 px Icon den kompletten String "Satz des Phytagoras Ardi" reingequetscht hast, dann ist der erste Eindruck eher suboptimal, ums mal gelassen auszudrücken.

    Und wenn ich deinen Code oben sehe: Du guckst was in der CB drin steht, in dem du mit dem String vergleichst. Nimm doch ne enum mit den Werten Ankathete, Gegenkathete (wie zur Hölle schreibt man Kathete?) und Hypotenuse, und binde das an die CB
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    Ich bin mal ehrlich, dass Icon habe ich nur gemacht weil ich gerade kein besseres hatte und bei den 3 Bildern habe ich mir auch keine Mühe gegeben, doch das Programm sieht im gegensatz mal abgesehen von den 2 Sachen gut aus.
    Die verändere ich jetzt gleich.

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

    RodFromGermany schrieb:

    Ich führe keine solchen fremden Programme aus.

    AProgrammer schrieb:

    Quellcode
    sollst Du hochladen.

    RodFromGermany schrieb:

    Pack die Quellen in eine ZIP und nutze die Forumsfunktionalität:
    Erweitertze Antwort => Dateianhänge => hochladen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Okay, wo soll ich anfangen... :
    1. Zwei leere EventHandler.
    2. Polling: Du fragst in einem Timer die CB ab, dazu gibt es ein passendes Event, guck mal bei MSDN
    3. Deine Berechnung ist purer overhead.

    C#-Quellcode

    1. double a, b;
    2. if (!double.TryParse(tb1.Text, out a) || !double.TryParse(tb2.Text, out b)
    3. return;
    4. var c = Math.Sqrt(a * a + b * b);

    4. Deine TextBoxen (generell Controls) können richtige Namen bekommen.
    5. ifs mit nur einer Zeile im Body brauchen keine { }
    6. Anstatt den Text der CB zu vergleichen, vergleiche den SelectedIndex
    7. Wenn du mehrere Ifs hast, die nur verschiedene Werte einer Variable prüfen, nutze switch{}

    Joa, mehr fällt mir erstmal nicht auf, korrigiere das und zeig nochmal, dann guck ich mir das nochmal an. Aber ich bin mir sicher, dein Code von 165 Zeilen dann gut um 50% gekürzt werden.
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    @ThePlexian
    Ich habe versucht alle deine Tipps zu verbessern.
    1. Ist korrigiert
    2. Ist korrigiert(SelectedIndexChanged-Event)
    3. Auch verbesserst, doch die Werte konvertiere ich immer noch mit Convert.ToDouble(). Die Rechnung selbst ist aber verkürzt wie du es mir gezeigt hast.
    4. Ist korrigiert
    5. Ist korrigiert
    6. Ist korrigiert
    7. Ist korrigiert

    Code im Anhang + Fertigem Programm(hat keinen extra Ordner mehr, weil die Bilder jetzt in den Resourcen sind)
    Eine Frage noch: Wie bevorzugst du es zu Parsen anstatt normal zu konvertieren?
    Dateien

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

    Okay soweit:
    1. Seite solltest du zu cbSeite o.Ä. machen (besser sogar noch in Englisch), damit man weiß, dass das ne ComboBox ist. (genauso mit den TB und Labels)
    2. im private void button1_Click(object sender, EventArgs e) kannst du direkt beim 1. If auch mit SelectedIndex arbeiten
    3. Beim berechnen würde ich mit den Variablen aus dem Switch-Scope raus, und immer noch double.TryParse, außerdem würde ich, wenn bspw. b > c, dann einfach tauschen.

    C#-Quellcode

    1. double a, b, c;
    2. switch(Seite.SelectedIndex)
    3. {
    4. case 0: //find c
    5. if (!double.TryParse(Wert1.Text, out a) || !double.TryParse(Wert2.Text, out b))
    6. break;
    7. c = Math.Sqrt(a * a + b * b)
    8. Ergebnis.Text = c.ToString();
    9. break;
    10. case 1: //find a
    11. if (!double.TryParse(Wert1.Text, out c) || !double.TryParse(Wert2.Text, out b))
    12. break;
    13. if (b >= c)
    14. break;
    15. a = Math.Sqrt(c * c - b * b);
    16. Ergebnis.Text = a.ToString();
    17. break;
    18. case 2:
    19. if (!double.TryParse(Wert1.Text, out c) || !double.TryParse(Wert2.Text, out a))
    20. break;
    21. if (a >= c)
    22. break;
    23. b = Math.Sqrt(c * c - a * a);
    24. Ergebnis.Text = b.ToString();
    25. break;
    26. }

    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    2.Wie soll ich beim ersten If mit SelectedIndex Arbeiten?
    Habs herausgefunden...habe einfach den Index abgefragt und ausgegeben, habe jetzt alles korrigiert.
    1. Ist korrigiert
    3. Ist korrigiert
    @ThePlexian

    Code im Anhang
    Dateien

    Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von „AProgrammer“ ()