C# Programm-Problem

Dieses Thema im Forum "Webmaster Hilfe / Programmierer Forum" wurde erstellt von weltbesiedler, 25.05.2011.

  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. AdMan

    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:
    25.889
    Zustimmungen:
    91
    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:
    25.889
    Zustimmungen:
    91
    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:
    25.889
    Zustimmungen:
    91
    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:
    25.889
    Zustimmungen:
    91
    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. AdMan

    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.
  11. #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();
    
            }
        }
    }
    
    
    
     
  12. #10 xandros, 28.05.2011
    xandros

    xandros IT Consultant, Cisco Registered Partner
    Moderator

    Dabei seit:
    05.07.2007
    Beiträge:
    25.889
    Zustimmungen:
    91
    Ort:
    Umkreis Duisburg, neben Mannheim, hinter Hamburg
    AH! Dir ist etwas aufgefallen.....
    Divisionen ergeben sehr haeufig keine Integer-Ergebnisse.
     
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. ungültiger if ausdruck c#,
  13. c# ungültiger ausdruck int,
  14. Formatexception wurde nicht von Benutzer behandelt,
  15. ungültiger ausdruck case,
  16. c# konsolenanwendung zahl1 bis zahl2 rechnen,
  17. c# nur assignment,
  18. char[] ungültiger ausdruck char,
  19. c# ungültiger ausdruck ref,
  20. ungültiger ausdruck c#,
  21. c# fehlermeldung ausdruck ungültig,
  22. format exception wurde nicht behandelt c#,
  23. ungültiger ausdruck case in switch,
  24. fehlermeldung ungültiger ausdruck else,
  25. format exception c# behandeln
Die Seite wird geladen...

C# Programm-Problem - Ähnliche Themen

  1. WLan Problem

    WLan Problem: Hallo, habe ein kleines Problem mit meinem Netzwerk zu Hause. Zur Info: Internetanschluß ist nen 16.000er von ALice/O2. (Bitte nichts sagen,...
  2. Ein Problem mit Bluetooth

    Ein Problem mit Bluetooth: Hallo, ich habe exakt das Bliuetoothmodul, das in diesem Video gezeigt ist: [MEDIA] bin aber der Meinung, dass das bereits geflasht ist, denn...
  3. Domänencontroller Problem

    Domänencontroller Problem: Bekomme neuerdings immer eine Fehlermeldung in der Ereignisanzeige angezeigt: Software_Protection_Platform_Service Lizenzerwerb-Fehlerdetails....
  4. Windows Server 2012R2 Problem

    Windows Server 2012R2 Problem: Moin, wir haben das Problem, das bei Aufforderung das Benutzerpasswort zu ändern in der Windowsumgebung, die Fehlermeldung: "Das System hat...
  5. Problem mit Sims 2

    Problem mit Sims 2: Hey ich habe Sims 2 auf meinem Laptop installiert, ist schon länger her. Ich habe verschiedene Erweiterungspacks gekauft und installiert habe fast...