C# Programm-Problem

Diskutiere C# Programm-Problem im Webmaster Hilfe / Programmierer Forum Forum im Bereich Computerprobleme; Hab ein kleines Problem. Ich möchte das er in ein Label einen Text schreibt, wenn die Eingabe vom Typ String ist, also ein Wort, keine Zahl. Ich...

  1. #1 weltbesiedler, 25.05.2011
    Zuletzt bearbeitet: 25.05.2011
    weltbesiedler

    weltbesiedler 08/15 User

    Dabei seit:
    19.07.2010
    Beiträge:
    2.827
    Zustimmungen:
    0
    Ort:
    Bayern
    Hab ein kleines Problem. Ich möchte das er in ein Label einen Text schreibt, wenn die Eingabe vom Typ String ist, also ein Wort, keine Zahl. Ich hab versucht das Problem so zu lösen:
    Code:
    namespace Taschenrechner
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void textBox2_TextChanged(object sender, EventArgs e)
            {
    
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                
                int Zahl1 = Convert.ToInt16(textBox1.Text);
                int Zahl2 = Convert.ToInt16(textBox2.Text);
                int ergebnis = Zahl1 + Zahl2;
                ergebnis = Zahl1 + Zahl2;
                textBox3.Text = Convert.ToString(ergebnis);
                if (textBox3.Text == string)
                    label2.Text = "Nur Zahlen";
              
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                int Zahl1 = Convert.ToInt16(textBox1.Text);
                int Zahl2 = Convert.ToInt16(textBox2.Text);
                int ergebnis = Zahl1 + Zahl2;
                ergebnis = Zahl1 - Zahl2;
                textBox3.Text = Convert.ToString(ergebnis);
                if (textBox3.Text == string)
                    label2.Text = "Nur Zahlen";
    
            }
        }
    }
    
    Allerdings scheint das Wort "string" nicht zulässig zu sein:
     
  2. Anzeige

    schau mal hier: Windows-Wartungs-Tool. Viele Probleme lassen sich damit einfach beheben. Oftmals ist der PC dann auch schneller!
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren.
  3. #2 xandros, 25.05.2011
    xandros

    xandros IT Consultant, Cisco Registered Partner
    Moderator

    Dabei seit:
    05.07.2007
    Beiträge:
    26.162
    Zustimmungen:
    116
    Ort:
    Umkreis Duisburg, neben Mannheim, hinter Hamburg
    String ist ein Keyword, welches in der verwendeten Form als Variable betrachtet wird..... und die Variable wurde nirgends definiert! (waere auch ziemlich ungluecklich, einer Variablen die Bezeichnung eines Keywords zu geben!)

    Ich gehe davon aus, dass du in den betreffenden Zeilen lediglich ueberpruefen willst, ob der String eine Zeichenkette oder eine Zahl ist.

    Entweder verwendest du dafuer TryParse() oder du bindest z.B. die Bibliothek Microsoft.VisualBasic.dll ein, mit der du dann auf die VB-Funktion IsNumeric() zugreifen kannst.Damit waere es dann z.B. moeglich, die Abfrage auf != IsNumeric umzustellen.
     
  4. #3 weltbesiedler, 27.05.2011
    Zuletzt von einem Moderator bearbeitet: 27.05.2011
    weltbesiedler

    weltbesiedler 08/15 User

    Dabei seit:
    19.07.2010
    Beiträge:
    2.827
    Zustimmungen:
    0
    Ort:
    Bayern
    Danke schon einmal für deine Hilfe.
    Den Code hab ich nun völlig verworfen und hab versucht einen Taschenrechner zu Programmieren.
    Es gibt einen Button und 3 Text Boxen. In 2 Text Boxen gibt man zwei Zahlen ein und in die dritte die Rechenart ( Division, Subtraktion, Multiplikation, Addition ), wenn man etwas anderes eingibt, soll die Meldung erscheinen: "Bitte eine Rechenart eingeben".
    Ich hab versucht das bis jetzt so zu lösen:
    Code:
      
                int a = Convert.ToInt16 (textBox1.Text);
                int b = Convert.ToInt16(textBox2.Text);
                int c = Convert.ToInt16(textBox3.Text);
                int ergebnis;
                if (textBox3.Text == "Division")
                    ergebnis = a / b;
                if (textBox3.Text == "Multiplikation")
                    ergebnis = a * b;
                if (textBox3.Text == "Subtraktion")
                    ergebnis = a - b;
                if (textBox3.Text == "Addition")
                    ergebnis = a + b;
                textBox3.Text = Convert.ToString (ergebnis);
    Dann erscheint aber die Fehlermeldung:
    Das kommt wahrscheinlich davon, dass der Variable ergebnis erst ein Wert zugeordnet wird, wenn eine If-Anweisung zutrifft. Und wie programmiere ich, dass, wenn keine Rechenart eingegeben wurde, ein Fenster aufgeht mit der oben genannten Meldung?
    Try - Catch hab ich schon probiert, aber das geht nicht.
    Edit: Keine Ahnung wieso Zeile, wo die Variable a zugewiesen wird, verschoben ist.
    Edit:
    Hier mal ein zweiter Versucht, der funktioniert aber auch nicht:

    Code:
      int a = Convert.ToInt16 (textBox1.Text);
                int b = Convert.ToInt16(textBox2.Text);
                int c = Convert.ToInt16(textBox3.Text);
                int ergebnis;
                int rechenart = Convert.ToInt16(textBox3.Text);
                ergebnis = a + rechenart + b;
                ergebnis = Convert.ToInt16 (textBox4.Text);
                textBox4.Text = Convert.ToString (ergebnis);
    Fehlermeldung:
     
  5. #4 xandros, 27.05.2011
    Zuletzt bearbeitet: 27.05.2011
    xandros

    xandros IT Consultant, Cisco Registered Partner
    Moderator

    Dabei seit:
    05.07.2007
    Beiträge:
    26.162
    Zustimmungen:
    116
    Ort:
    Umkreis Duisburg, neben Mannheim, hinter Hamburg
    Du verwendest hier C# und nicht VB, daher solltest du die Variablen schon korrekt deklarieren und initialisieren.


    Code:
    int ergebnis = 0;
    Du konvertierst hier ein Character in eine Zahl, was voellig in die Hose gehen muss, wenn dieses Zeichen nicht numerisch ist.....

    Hier nimmst du den Inhalt aus der Textbox4, konvertierst diesen in ein Integer und speicherst es in der Variablen ergebnis. Dann nimmst du den Inhalt aus der Variablen ergebnis, konvertierst ihn in einen String und weist diesen der Textbox4 zu....
    Ziemlich ueberfluesig.
     
  6. #5 weltbesiedler, 27.05.2011
    Zuletzt bearbeitet: 27.05.2011
    weltbesiedler

    weltbesiedler 08/15 User

    Dabei seit:
    19.07.2010
    Beiträge:
    2.827
    Zustimmungen:
    0
    Ort:
    Bayern
    So jetzt mal ein Versuch ganz ohne GUI:

    Code:
    static void Main(string[] args)
            {
                Console.Write("Hallo, welche Rechenart bevorzugen sie? ");
                string name = Console.ReadLine();
                Console.Write("Welche Zahl1: ");
                string Zahl1 = Console.ReadLine();
                Console.Write("Welche zahl2: ");
                string Zahl2 = Console.ReadLine();
                int ergebnis;
                ergebnis = Convert.ToInt16(Zahl1) + Convert.ToInt16(Zahl2);
                if (name == "Division")
                    ergebnis = Convert.ToInt16(Zahl1) / Convert.ToInt16(Zahl2);
                    Console.WriteLine(ergebnis);
                if (name == "Subtraktion")
                    ergebnis = Convert.ToInt16(Zahl1) - Convert.ToInt16(Zahl2);
                    Console.WriteLine(ergebnis);
                if (name == "Multiplikation")
                    ergebnis = Convert.ToInt16(Zahl1) * Convert.ToInt16(Zahl2);
                    Console.WriteLine(ergebnis);
                if (name == "Addition")
                    ergebnis = Convert.ToInt16(Zahl1) + Convert.ToInt16(Zahl2);
                    Console.WriteLine(ergebnis);
                 Console.ReadLine();
                    
            }
        }
    Bietet C# so etwas wie "elif" in Python? Weil wenn ich eine Rechnung eingebe, erscheint das Ergebnis immer viermal.
    Edit: "else if " gibt es anscheined allerdings wirft das bei mir eine Fehlermeldung aus:
    Code:
    if (name == "Division")
                    ergebnis = Convert.ToInt16(Zahl1) / Convert.ToInt16(Zahl2);
                    Console.WriteLine(ergebnis);
                else if (name == "Subtraktion")
                    ergebnis = Convert.ToInt16(Zahl1) - Convert.ToInt16(Zahl2);
                    Console.WriteLine(ergebnis);
     
  7. #6 xandros, 28.05.2011
    Zuletzt bearbeitet: 28.05.2011
    xandros

    xandros IT Consultant, Cisco Registered Partner
    Moderator

    Dabei seit:
    05.07.2007
    Beiträge:
    26.162
    Zustimmungen:
    116
    Ort:
    Umkreis Duisburg, neben Mannheim, hinter Hamburg
    #elif als Preprozessoranweisung (ist aber nicht das was du suchst!)
    #if (C# Reference)
    Weil du die Ausgabeanweisung auch viermal in deinem Code hast und JEDE davon ausgefuehrt wird! Und das geschieht, weil dein Code nicht sauber ist.... da fehlen jede Menge Klammern!
    Code:
    if (Condition1)[COLOR=Red]{[/COLOR]
         .....;
         .....;
    [COLOR=Red]}[/COLOR]
    if (condition2)[COLOR=RoyalBlue]{[/COLOR]
         .....;
         .....;
    [COLOR=RoyalBlue]}
    ....[/COLOR]
    Code:
    if (Condition1)[COLOR=Red]{[/COLOR]
         Anweisung;
         Anweisung;
    [COLOR=Red]}[/COLOR]
    else if (Condition2)[COLOR=SeaGreen]{[/COLOR]
         Anweisung;
         .....
    [COLOR=SeaGreen]}[/COLOR]
    else [COLOR=RoyalBlue]{[/COLOR]
         Anweisung;
         .....
    [COLOR=RoyalBlue]}[/COLOR]
    
    Schoener als die If-Abfragen ist aber Switch.
    Code:
    .....
    switch(name)
    {
        case "Division":
              ......Berechnung;
              break;
        case "....":
              ......Berechnung;
              break;
        case "....":
             ...........
    }
    Console.WriteLine("Ergebnis :{0}", ergebnis);
    hier mal ein Beispiel mit Switch....
    Code:
    static void Main(string[] args)
            {
                int ergebnis=0; 
                Console.WriteLine("erste Zahl");
                string erste = Console.ReadLine(); 
                Console.WriteLine("zweite Zahl");
                string zweite = Console.ReadLine(); 
                Console.WriteLine("Rechenart (+ - * /)");
                string zeichen = Console.ReadLine(); 
                int ierste=Convert.ToInt16(erste);
                int izweite=Convert.ToInt16(zweite);
                
    
                switch (zeichen)
                {
                    case "+":
                        ergebnis = ierste + izweite;
                        break;
                    case "-":
                        ergebnis = ierste - izweite;
                        break;
                    case "*":
                        ergebnis = ierste * izweite;
                        break;
                    case "/":
                        ergebnis = ierste / izweite;
                        break;
                }
                Console.WriteLine("Ergebnis: {0}", ergebnis);
                string pause = Console.ReadLine();/* dient nur als Warteeingabe, damit das Konsolenfenster nicht geschlossen wird. */
            }
     
  8. #7 weltbesiedler, 28.05.2011
    weltbesiedler

    weltbesiedler 08/15 User

    Dabei seit:
    19.07.2010
    Beiträge:
    2.827
    Zustimmungen:
    0
    Ort:
    Bayern
    Ok danke, hab das jetzt gelöst. Es haben nur die geschweiften Klammern gefehlt.
     
  9. #8 xandros, 28.05.2011
    xandros

    xandros IT Consultant, Cisco Registered Partner
    Moderator

    Dabei seit:
    05.07.2007
    Beiträge:
    26.162
    Zustimmungen:
    116
    Ort:
    Umkreis Duisburg, neben Mannheim, hinter Hamburg
    Dann solltest du (rein vom Stil her!) deinen Code noch dahingehend abaendern, dass in den IF-Teilen lediglich die Berechnung durchgefuehrt wird und die Ausgabe einmalig erst am Ende der Ueberpruefungen erfolgt.
    Das spart dir dann drei Zeilen Code....
     
  10. #9 weltbesiedler, 28.05.2011
    weltbesiedler

    weltbesiedler 08/15 User

    Dabei seit:
    19.07.2010
    Beiträge:
    2.827
    Zustimmungen:
    0
    Ort:
    Bayern
    Ok. Jetzt sieht der Code so aus:
    Code:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.Write("Hallo, welche Rechenart bevorzugen sie? ");
                string name = Console.ReadLine();
                Console.Write("Welche Zahl1: ");
                string Zahl1 = Console.ReadLine();
                Console.Write("Welche zahl2: ");
                string Zahl2 = Console.ReadLine();
                float ergebnis;
                ergebnis = Convert.ToInt16(Zahl1) + Convert.ToInt16(Zahl2);
                if (name == "Division")
                {
                    ergebnis = Convert.ToInt16(Zahl1) / Convert.ToInt16(Zahl2);
                    
                }
                else if (name == "Subtraktion")
                {
                    ergebnis = Convert.ToInt16(Zahl1) - Convert.ToInt16(Zahl2);
                    
                }
                else if (name == "Multiplikation")
                {
                    ergebnis = Convert.ToInt16(Zahl1) * Convert.ToInt16(Zahl2);
                    
                }
                else if (name == "Addition")
                {
                    ergebnis = Convert.ToInt16(Zahl1) + Convert.ToInt16(Zahl2);
                    
                }
                Console.WriteLine(ergebnis);
                Console.ReadLine();
    
            }
        }
    }
    
    
    
     
  11. #10 xandros, 28.05.2011
    xandros

    xandros IT Consultant, Cisco Registered Partner
    Moderator

    Dabei seit:
    05.07.2007
    Beiträge:
    26.162
    Zustimmungen:
    116
    Ort:
    Umkreis Duisburg, neben Mannheim, hinter Hamburg
    AH! Dir ist etwas aufgefallen.....
    Divisionen ergeben sehr haeufig keine Integer-Ergebnisse.
     
  12. Anzeige

    Es ist generell erstmal empfehlenswert alle ggf. veralteten oder fehlerhaften Treiber zu scannen und auf neue zu aktualisieren. Hier kannst du einen Treiber-Scanner downloaden. Das erspart oftmals viel Ärger und hilft gegen diverse Probleme.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren.
  13. #11 weltbesiedler, 28.05.2011
    weltbesiedler

    weltbesiedler 08/15 User

    Dabei seit:
    19.07.2010
    Beiträge:
    2.827
    Zustimmungen:
    0
    Ort:
    Bayern
    Ja eben, vorher war es int ergebnis; dann hab ich es mit float initialisiert, allerdings hat das nichts gebracht. 1 durch 2 ist weiterhin 0.
     
  14. #12 xandros, 28.05.2011
    xandros

    xandros IT Consultant, Cisco Registered Partner
    Moderator

    Dabei seit:
    05.07.2007
    Beiträge:
    26.162
    Zustimmungen:
    116
    Ort:
    Umkreis Duisburg, neben Mannheim, hinter Hamburg
    Typischer Fall von Typecasting.... Die Division enthaelt zwei Integer-Werte und liefert daher auch ein Integer-Ergebnis.... voellig egal, welcher Datentyp fuer die Zielvariable angegeben wurde. Du musst also die Integer-Variablen (mindestens die vor dem Divisionszeichen!) in Double oder Float konvertieren, damit auch ein Fliesskommawert herauskommt.
    Code:
    ....
    double ergebnis = 0;
    ...
    ...
    
    ergebnis = Convert.ToDouble(Zahl1) / Convert.ToInt16(Zahl2);
     
Thema: C# Programm-Problem
Besucher kamen mit folgenden Suchen
  1. c# formatexception wurde nicht behandelt

    ,
  2. ungültiger ausdruck else c#

    ,
  3. ungültiger ausdruck else

    ,
  4. c# ungültiger ausdruck else,
  5. formatexception wurde nicht behandelt c#,
  6. c# ungültiger ausdruck char,
  7. ungültiger ausdruck int,
  8. c# format exception wurde nicht behandelt,
  9. formatexception wurde nicht behandelt,
  10. c# class ungültiger ausdruck,
  11. c# ungültiger ausdruck string,
  12. CS0201 C# Nur assignment- call- increment- decrement- und new object-Ausdrücke können als Anweisung verwendet werden.,
  13. c# if probleme,
  14. c# konsolenanwendung ungültiger ausdruck else,
  15. ungültiger if ausdruck c#,
  16. c# ungültiger ausdruck int,
  17. Formatexception wurde nicht von Benutzer behandelt,
  18. ungültiger ausdruck case,
  19. c# konsolenanwendung zahl1 bis zahl2 rechnen,
  20. c# nur assignment,
  21. char[] ungültiger ausdruck char,
  22. c# ungültiger ausdruck ref,
  23. ungültiger ausdruck c#,
  24. c# fehlermeldung ausdruck ungültig,
  25. format exception wurde nicht behandelt c#
Die Seite wird geladen...

C# Programm-Problem - Ähnliche Themen

  1. Exchange 2013 Problem

    Exchange 2013 Problem: hallo, Ich habe ein Problem beim anlegen von Besprechungsräumen. ich bekomme unter "Besprechung anlegen" keine Räume angezeigt. Im Adressbuch sind...
  2. Problem beim abspielen von Blu-Ray's

    Problem beim abspielen von Blu-Ray's: Moin, ich habe ein Problem beim abspielen von Blu-Ray's. Mir ist bekannt, dass das Abspielen eine Zusatzsoftware benötigt, dafür habe ich mir den...
  3. PC startet nicht mehr richtig - CsrBtOBEX-Dienst Problem

    PC startet nicht mehr richtig - CsrBtOBEX-Dienst Problem: hallo, seit einigen tagen habe ich das problem dass mein PC etwa nach jedem 3. mal runterfahren ewig runter fährt (1-2 Min, normal 10-20 sek.) ....
  4. Sharkoon Fire Glider Optical Problem

    Sharkoon Fire Glider Optical Problem: Hallo leute seit ich Windows 10 Habe läuft die Maus irgendwie etwas hackelig und nicht mehr so schön flüsssig wie unter windows 7 über denn...
  5. Windows 10 immer auf Höchstleistung problem

    Windows 10 immer auf Höchstleistung problem: Hallo, Ich habe Windows 10 und bei mir ist in der Energieoption Ausbalanciert eingestellt ( Desktop PC ) Wenn ich nun ein Game Beendet habe z.b:...