# C# - Leere Variable, wie überprüfen?



## Der Maniac (18. Februar 2010)

*C# - Leere Variable, wie überprüfen?*

Hallo Leute!

Ich rätsel grade dadran wie ich eine leere Variable finden kann und dann ne Fehlermeldung rausgegeben wird?!

Ich habe in meinem Programm (Anhang!) Diverse Programmstellen wo eine Zahleneingabe erwartet wird, kommt hier jedoch ein Buchstabe oder einfach nichts, stürzt das Programm ab, und das möchte ich verhindern!

Weiß jemand wie ich das bewerkstelligen kann?

Den entsprechenden Quellcode evtl. so einfügen dasich es nurnoch kopieren brauch 

Danke schonmal fürs Kopf zerbrechen


----------



## bingo88 (18. Februar 2010)

*AW: C# - Leere Variable, wie überprüfen?*

Hab's jetzt mal ausm Kopf gemacht, müsste aber die Ausnahme vermeiden...

```
static void Main()
    {
        int typ;
        Console.Clear();
        Console.WriteLine("************************************************************");
        Console.WriteLine("Bitte waehlen sie den Anwendungstyp aus!");
        Console.WriteLine("Dauerhaft ausfuehren  ==>   1");
        Console.WriteLine("X Mal ausfuehren      ==>   2");
        String input = Console.ReadLine();
        if (input != null)
        {
            typ = Convert.ToInt32(Console.ReadLine());
        }
        Console.WriteLine("************************************************************");

            switch (typ)
            {
                case 1:
                    Dauerhaft();
                    break;

                case 2:
                    X_Mal();
                    break;

                default:
                    Console.WriteLine("Bitte geben Sie NUR eine 1 oder eine 2 ein!");
                    break;
            }
    }
```


----------



## Der Maniac (18. Februar 2010)

*AW: C# - Leere Variable, wie überprüfen?*

Das funktioniert fast...^^

Nur mekkert er jetzt das die Variable "Typ" nichtmehr zugewiesenw erden kann... Wenn ich den geschwiften Klammern nach dem if (input...) wegmache, erkennt er typ wieder, allerdings funktioniert dann der rest nicht mehr >.<


----------



## bingo88 (18. Februar 2010)

*AW: C# - Leere Variable, wie überprüfen?*

Hast du mal versucht, int typ = 0 zu schreiben? Java nörgelt nämlich auch, wenn man auf uninitialisierte Variablen zugreift.


----------



## rofl...vs...xD (19. Februar 2010)

*AW: C# - Leere Variable, wie überprüfen?*

Das sollte so funktionieren wie du das willst. 


```
static void Main()
        {
            int typ;
            Console.Clear();
            Console.WriteLine("************************************************************");
            Console.WriteLine("Bitte waehlen sie den Anwendungstyp aus!");
            Console.WriteLine("Dauerhaft ausfuehren  ==>   1");
            Console.WriteLine("X Mal ausfuehren      ==>   2");
            Console.WriteLine("************************************************************");
            String input = Console.ReadLine();
            if (input != "")
            {
                typ = Convert.ToInt32(Console.ReadLine());



                switch (typ)
                {
                    case 1:
                        Dauerhaft();
                        break;

                    case 2:
                        X_Mal();
                        break;

                    default:
                        Console.WriteLine("Bitte geben Sie NUR eine 1 oder eine 2 ein!");
                        break;
                }
            }
            else
            {
                Console.WriteLine("Keine Eingabe");
            }
        }
```


----------



## aurionkratos (19. Februar 2010)

*AW: C# - Leere Variable, wie überprüfen?*

Wenn jemand z.B. Buchstaben eingibt, haut er dir eine Exception raus. Bitte diese abfangen oder vorher mit  Int32.TryParse() überprüfen, ob es parsebar ist. Zweiteres wäre der bessere Weg.

EDIT: außerdem möchtest du sicherlich " typ = Convert.ToInt32(input);" anstatt " typ = Convert.ToInt32(Console.ReadLine());" haben, oder? 

EDIT 2: Der erste Absatz ist übrigens auch genau das, was der Threadersteller gesucht hat.


----------



## rofl...vs...xD (19. Februar 2010)

*AW: C# - Leere Variable, wie überprüfen?*



aurionkratos schrieb:


> Wenn jemand z.B. Buchstaben eingibt, haut er dir eine Exception raus. Bitte diese abfangen oder vorher mit  Int32.TryParse() überprüfen, ob es parsebar ist. Zweiteres wäre der bessere Weg.
> 
> EDIT: außerdem möchtest du sicherlich " typ = Convert.ToInt32(input);" anstatt " typ = Convert.ToInt32(Console.ReadLine());" haben, oder?
> 
> EDIT 2: Der erste Absatz ist übrigens auch genau das, was der Threadersteller gesucht hat.



Du hast schon recht mit Buchstaben usw. ABER das hat der Threadhersteller nicht verlangt.

Ich habe mich nur auf sein Problem beschränkt, obwohl das mit Int32.TryParse(); usw sehr sinnvoll wäre.

Und mit deinem ersten EDIT hast du natürlich vollkommen recht.


----------



## bingo88 (19. Februar 2010)

*AW: C# - Leere Variable, wie überprüfen?*

Das hab ich doch glatt übersehn... kommt davon, wenn man das nicht ausprobiert


----------



## d00mfreak (20. Februar 2010)

*AW: C# - Leere Variable, wie überprüfen?*

Wenn es wirklich nur um eine Unterscheidung zwischen "1", "2", und "Rest" gehen soll, dann sollte doch ein einfacher If-Block wie

```
if (input == "1"){
	Dauerhaft();
}
else if (input == "2"){
	X_Mal();
}
else{// if input == alles andere
	Console.WriteLine("Bitte geben Sie eine 1 oder eine 2 ein!");
}
```
ohne hin- und herkonvertieren sowie Parse-Versuche reichen? Oder ist es für die Aufgabe auch nötig, zwischen einer leeren Eingabe und dem Rest zu unterscheiden?


----------



## Der Maniac (24. Februar 2010)

*AW: C# - Leere Variable, wie überprüfen?*

So ich melde mich auch noch mal 

Folgendes: Das einzige was einwandfrei funktioniert ist die Lösung von d00mfreak, allerdings wollte ich versuchen Switchcase zu verwenden, sieht schöner aus 

Die Lösung von Rofl...vs...xD funktioniert fast, bei Zahlen oder einer leeren Eingabe kein Problem, kommt hier aber ein Buchstabe stürzt das ganze wieder ab mit einer Exception...^^ Knapp am Ziel vorbei also...

Das mit dem Parse klingt interessant, kann das hier jemand näher erläutern bzw. erklären was das macht und wie ich es einbinde? Ich mach jetzt seit grade mal 4 Wochen C#...^^ 

mfg, Maniac


----------



## bingo88 (24. Februar 2010)

*AW: C# - Leere Variable, wie überprüfen?*

Du könntest sowas in der Art machen:

```
int wert = 0;

while (true)
{
    try
    {
        wert = Convert.ToInt32(Console.ReadLine());
        break;
    }
    catch (Exception)
    {
        Console.WriteLine("Bitte geben sie eine Zahl ein!");
    }
}
```


----------



## d00mfreak (24. Februar 2010)

*AW: C# - Leere Variable, wie überprüfen?*



Der Maniac schrieb:


> [...]  sieht schöner aus



naja... 



Der Maniac schrieb:


> Das mit dem Parse klingt interessant, kann das hier jemand näher erläutern bzw. erklären was das macht und wie ich es einbinde?



So:

```
if (Int32.TryParse(Eingabe, out Ergebnis)){
       	//das wird gemacht, wenn der Parse-Versuch erfolgreich war
}
else{
       	//das wird gemacht, wenn der Parse-Versuch nicht erfolgreich war
}
```

Ist der Parse-Versuch erfolgreich, wird das Ergebnis in "Ergebnis" geschrieben.


Alternativ würde auch ein try-catch-Block (fürs Exception-Handling) funktionieren:

```
try{
       	//mach das
}
catch{
       	//oder mach das, falls obiges ne Exception wirft
}
```

Fügst du bei Catch z.B. noch "(Exception ex)" an, kannst du später z.B. noch die Fehler-Informationem mit "ex.Message" abgreifen.

Aber wie du siehst, irgend etwas if-artiges wirst du immer brauchen, die Frage ist nur, ob es mit einem If-Block oder mehreren erledigt wird. Und da sind ineinander verschachtelte Ifs nur verschwendete Arbeit. Da sollte es nicht weh tun, man ein "else (if)" dran zu ketten. Case-Switch ist im Prinzip auch nur eine If-Anweisung, die allerdings nur aus Gründen der Übersichtlichkeit bei sehr vielen Fallunterscheidungen existiert. 

Wenn du dich weiter mit C# befassen willst ist C# - Galileo OpenBook ne gute (und vor allem kostenlose ) Lektüre. Anonsten hilft auch die MSDN Library weiter


----------



## Der Maniac (24. Februar 2010)

*AW: C# - Leere Variable, wie überprüfen?*

Umpf... 
Danke für die Erklärung, solangsam komm ich dahinter wie das ganze funktioniert...

Was mich jetzt noch freuen würde wäre, wenn du das ganze hier im Programmkopf einbindest, also nur in der ersten Abfrage  unten möchte ich das mal probieren... Nur bekomm ichs jetzt grade ganz ohne Hilfe nicht hin. Sieht zwar sehr gut aus aber es klappt nicht so ganz wie ich es will >.<
Zumal ich das mit dem (Eingabe, out Ergebnis) nicht ganz verstehe, also wie ich das verwenden muss. Wenn da dann gleich was drin steht versteh ichs bestimmt, aber immoment kann ich mir da keinen Reim drauf machen.

Und nochmal für alle: Es soll eine leere Variable abgefangen werden, sofern eine kommt und dann soll eine Meldung ausgegeben werden, die dem Nutzer sagt das nur Zahlen eingegeben werden dürfen, keine Buchstaben und auch nicht "garnix" 

Sourcecode:

```
using System;

class Program
{
    static void Main()
    {
        int typ;
        Console.Clear();
        Console.WriteLine("************************************************************");
        Console.WriteLine("Bitte waehlen sie den Anwendungstyp aus!");
        Console.WriteLine("Dauerhaft ausfuehren  ==>   1");
        Console.WriteLine("X Mal ausfuehren      ==>   2");
        Console.WriteLine("************************************************************");
        String input = Console.ReadLine();
        if (input != "")
        {
            typ = Convert.ToInt32(Console.ReadLine());


            switch (typ)
            {
                case 1:
                    Dauerhaft();
                    break;

                case 2:
                    X_Mal();
                    break;

                default:
                    Console.WriteLine("Bitte geben Sie NUR eine 1 oder eine 2 ein!");
                    break;
            }
        }
        else
        {
            Console.WriteLine("Keine Eingabe");
            Console.ReadLine();
            Main();
        }
    }


    static void Dauerhaft()
    {
        int n = 1;
        while (n == 1)
        {
            Rechner_2();
        }
    }

    static void X_Mal()
    {
        int n;
        Console.WriteLine("Wie oft moechten Sie das Programm ausfuehren? ");
        n = Convert.ToInt32(Console.ReadLine());
        for (n = 0; n < 10; n++)
        {
            Rechner();
        }
    }

    static void Rechner()
    {

        //Deklaration der Variablen
        double umsatz, wert;
        int auswahl;
        string again;
        //Eingabemaske zur Auswahl der Lohnberechnungen
        do
        {
            Console.Clear();
            Console.WriteLine("************************************************************");
            //Eingabe der gewünschten Werte
            Console.Write("Bitte geben Sie ihren Umsatz ein: ");
            umsatz = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine(" ");
            Console.WriteLine("  Bitte wählen Sie den Mitarbeiterstatus aus: ");
            Console.WriteLine("  Freier Mitarbeiter        ==> 1");
            Console.WriteLine("  Angestellter Mitarbeiter  ==> 2\n");
            Console.Write("  ");
            auswahl = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("************************************************************");
            Console.WriteLine();


            switch (auswahl)
            {
                case 1:
                    wert = (umsatz / 100) * 8;
                    Console.Write("Ihr Gehalt betraegt " + wert);
                    Console.WriteLine(" Euro.\n\n\n");
                    Console.ReadLine();
                    break;

                case 2:
                    wert = (umsatz / 100) * 5 + 1000;
                    Console.Write("Ihr Gehalt betraegt " + wert);
                    Console.WriteLine(" Euro.\n\n\n");
                    Console.ReadLine();
                    break;

                default:
                    Console.WriteLine("Falsche Eingabe du Nudel!\n\n\n");
                    Console.ReadLine();
                    break;

                case 42:
                    Console.WriteLine("Du hast die Antwort auf alles gefunden!!!111einself\n\n\n");
                    Console.ReadLine();
                    break;

                case 1337:
                    Console.WriteLine("U r s0 l33t, u d4m/|/ N3rd!\n\n\n");
                    Console.ReadLine();
                    break;


            }
            Console.Clear();
            Console.WriteLine("Moechten Sie das Programm nochmal ausführen? j/n ");
            again = Convert.ToString(Console.ReadLine());
        }
        while (again == "j");



    }

    static void Rechner_2()
    {

        //Deklaration der Variablen
        double umsatz, wert;
        int auswahl;
        //Eingabemaske zur Auswahl der Lohnberechnungen
        Console.Clear();
        Console.WriteLine("************************************************************");
        //Eingabe der gewünschten Werte
        Console.Write("Bitte geben Sie ihren Umsatz ein: ");
        umsatz = Convert.ToDouble(Console.ReadLine());
        Console.WriteLine(" ");
        Console.WriteLine("  Bitte wählen Sie den Mitarbeiterstatus aus: ");
        Console.WriteLine("  Freier Mitarbeiter        ==> 1");
        Console.WriteLine("  Angestellter Mitarbeiter  ==> 2\n");
        Console.Write("  ");
        auswahl = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine("************************************************************");
        Console.WriteLine();


        switch (auswahl)
        {
            case 1:
                wert = (umsatz / 100) * 8;
                Console.Write("Ihr Gehalt betraegt " + wert);
                Console.WriteLine(" Euro.\n\n\n");
                Console.ReadLine();
                break;

            case 2:
                wert = (umsatz / 100) * 5 + 1000;
                Console.Write("Ihr Gehalt betraegt " + wert);
                Console.WriteLine(" Euro.\n\n\n");
                Console.ReadLine();
                break;

            default:
                Console.WriteLine("Falsche Eingabe du Nudel!\n\n\n");
                Console.ReadLine();
                break;

            case 42:
                Console.WriteLine("Du hast die Antwort auf alles gefunden!!!111einself\n\n\n");
                Console.ReadLine();
                break;

            case 1337:
                Console.WriteLine("U r s0 l33t, u d4m/|/ N3rd!\n\n\n");
                Console.ReadLine();
                break;


        }
    }

}
```

Und da nur eben oben das mit dem Parse rein, dann wäre mir schon um einiges geholfen! Falls nötig kannst du den Switchkram da auch raushauen!


----------

