[C#]Fehler: Nicht zugewiesene Variable

08/18/2014 18:30 D!zzl3#1
Moin,
übe mich gerade ein bisschen an C# und habe versucht einen kleinen Taschenrechner zu programmieren doch bekomme folgende Fehlermeldung:

Quote:
Fehler 1 Verwendung der nicht zugewiesenen lokalen Variablen "ergebnis"
Hier der Code:

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ErsteKonsolenanwendung
{
    class Program
    {
        static void Main(string[] args)
        {
            double zahl1, zahl2, ergebnis;
            string operand;


            Console.WriteLine("Bitte geben sie die erste Zahl ein:");
            zahl1 = Convert.ToDouble(Console.ReadLine());

            Console.WriteLine("Bitte geben sie die zweite Zahl ein:");
            zahl2 = Convert.ToDouble(Console.ReadLine());

            Console.WriteLine("Bitte wählen sie den Operand aus:");
            operand = Console.ReadLine();

            if (operand == "+")
            {
                ergebnis = zahl1 + zahl2;
            }

            else if (operand == "-")
            {
                ergebnis = zahl1 - zahl2;
            }

            else if (operand == "/")
            {
                ergebnis = zahl1 / zahl2;
            }

            else if (operand == "*")
            {
                ergebnis = zahl1 * zahl2;
            }

            else
            {
                Console.WriteLine("Der ausgewählte Operand wird nicht unterstützt, weshalb wir das Ergebnis \"0\" als Ausgabeergebnis verwenden!");
            }


                Console.WriteLine(ergebnis);
                Console.ReadKey();


        }
    }
}
Unten bei
Quote:
Console.WriteLine(ergebnis);
soll der Fehler liegen...

Ich habe aber doch die Variable oben zugewiesen!?:confused:
Quote:
double zahl1, zahl2, ergebnis;

Was ist falsch?
Gruß
D!Zzl3
08/18/2014 18:41 Black Tiger ツ#2
Du hast hier deklariert:

Code:
            double zahl1, zahl2, ergebnis;
            string operand;
und hier initialisiert (sprich, Speicher zugewiesen)[durch benutzer]:

Code:
            zahl1 = Convert.ToDouble(Console.ReadLine());
            zahl2 = Convert.ToDouble(Console.ReadLine());
            operand = Console.ReadLine();
Allerdings hast du für ergebnis keinen Speicher reserviert. Einfach:

Code:
            double zahl1, zahl2, ergebnis = 0.0;
            string operand;
08/18/2014 18:43 D!zzl3#3
Einwandfrei! hat funktioniert!
Danke dir :)
08/18/2014 18:48 tooti#4
Und wäre es nicht sinnvoller für die Operatoren switch anstatt if's zu nehmen?
Code:
switch (operand)
            {
                case "+":
                    ergebnis = zahl1 + zahl2;
                    break;
                case "-":
                    ergebnis = zahl1 - zahl2;
                    break;
                case "/":
                    ergebnis = zahl1 / zahl2;
                    break;
                case "*":
                    ergebnis = zahl1 * zahl2;
                    break;
                default:
                    Console.WriteLine("Der ausgewählte Operand wird nicht unterstützt, weshalb wir das Ergebnis \"0\" als Ausgabeergebnis verwenden!");
                    break;
            }
08/18/2014 19:36 Black Tiger ツ#5
Wenn wir schon dabei sind, kannst du auch nur Zahlen sowie ein "," sowie ein "-" [am Anfang] zulassen ([Only registered and activated users can see links. Click Here To Register...]):

Code:
        static double ReadNumber()
        {
            var buf = new StringBuilder();
            for (; ; )
            {
                var key = Console.ReadKey(true);
                if (key.Key == ConsoleKey.Enter && buf.Length > 0)
                {
                    Console.WriteLine();
                    return Convert.ToDouble(buf.ToString());
                }
                else if (key.Key == ConsoleKey.Backspace && buf.Length > 0)
                {
                    buf.Remove(buf.Length - 1, 1);
                    Console.Write("\b \b");
                }
                else if (System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator.Contains(key.KeyChar) && buf.ToString().IndexOf(System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator) == -1)
                {
                    buf.Append(key.KeyChar);
                    Console.Write(key.KeyChar);
                }
                else if ("-".Contains(key.KeyChar) && buf.ToString().IndexOf("-") == -1 && buf.ToString() == "")
                {
                    buf.Append(key.KeyChar);
                    Console.Write(key.KeyChar);
                }
                else if ("0123456789".Contains(key.KeyChar))
                {
                    buf.Append(key.KeyChar);
                    Console.Write(key.KeyChar);
                }
                else
                {
                    Console.Beep();
                }
            }
        }
Und dann einfach:

Code:
            Console.WriteLine("Bitte geben sie die erste Zahl ein:");
            zahl1 = ReadNumber();

            Console.WriteLine("Bitte geben sie die zweite Zahl ein:");
            zahl2 = ReadNumber();
08/19/2014 00:30 D!zzl3#6
Ich habe mich zum ersten mal mit C# auseinandergesetzt und kenne die Methoden nicht so gut, danke für die Vorschläge :P
Das mit den Switch sieht einfacher aus ^^
Das zweite von Black Tiger verstehe ich nicht so auf Anhieb :D

Es gehört vlt. nicht in das Thema hier rein aber habt ihr ein paar Tipps für Einsteiger?
-Wo und wie ich die Sprache lernen kann?
-Kennt ihr vlt. Youtube Channels oder andere Tutorial-Umgebungen die einem nicht direkt mit Fachbegriffen überschütten sondern Schritt für Schritt an die Materie heranführen?

Ich habe einiges gefunden aber die meisten Sachen werden nur theoretisch oder unzureichend erklärt...
08/19/2014 08:14 Rorc#7
ein grundlagenbuch kaufen und danach via tutorials/bücher in deine zielrichtung gehen.
08/19/2014 14:56 Ih¢sãs123#8
Quote:
Originally Posted by Shanks View Post
ein grundlagenbuch kaufen und danach via tutorials/bücher in deine zielrichtung gehen.
Man braucht keine Bücher. Schau dir im Internet einfach das an was du brauchst und es gibt für c# genug Tutorialreihen.
08/20/2014 21:17 D!zzl3#9
Quote:
Originally Posted by Shanks View Post
ein grundlagenbuch kaufen und danach via tutorials/bücher in deine zielrichtung gehen.
Kennst du ein gutes Buch? Sehe auf Amazon auf der ersten Seite gleich 12 Bücher mit Bewertungen +4 Sterne... Würde mich aber freuen wenn hier jemand ist der mehr Erfahrung hat mit C# und mir vlt. direkt eins empfehlen kann... deswegen frage ich auch ^^

Quote:
Man braucht keine Bücher. Schau dir im Internet einfach das an was du brauchst und es gibt für c# genug Tutorialreihen.
Ich hatte doch oben erwähnt das ich mir schon ein paar Tutorialreihen angeschaut habe. Bei den einen findet man die ersten paar Videos gute Erklärungen... später dann kommen nur noch Sätze wie ""Behandle/Erkläre ich später was ich gerade mache.." (zur Erklärung kommt es dann doch nie) oder sie fangen an unverständlich zu werden, erklären was und im nächsten Moment korrigieren sie es doch wieder und sorgen für Verwirrung. Ein paar Tutorialreihen brachen sogar irgendwann ab und es hieß nur noch: "Wird bald fortgesetzt" - Stand vor einem Jahr ^^

Ich bin selbst nicht zu Blöd zum Suchen nur wenn man selbst keine Ahnung hat von der Materie ist es schwierig zu wissen welche Tutorials gut sind und welche nicht... Wie schon eben erwähnt: Deswegen frage ich ja, ich suche nicht nach dem ultimativen Tutorial was auf mich zugeschnitten ist und mir alles in nur ein paar Stunden erklärt :D Aber vlt. nach einem wo jemand hier aus dem Forum sagen kann: "Mithilfe von diesem Buch oder diesen Videos hatte ich einen, wie ich finde, sehr guten Einstieg in die Sprache."

Wie auch immer: Trz. danke für die Antworten, ich informiere mich mal weiter :P

Gruß
Wasner
08/20/2014 21:40 Rorc#10
Quote:
Originally Posted by Ih¢sãs123 View Post
Man braucht keine Bücher. Schau dir im Internet einfach das an was du brauchst und es gibt für c# genug Tutorialreihen.
Genau so entstehen die Leute, die jeden 2ten Tag einen neuen Thread erstellen, mit einer Frage, die mit dem Lesen eines Grundlagenbuches nie aufgekommen wären.
Hierbei gilt der Grundsatz:
Halbwissen ist gefährliches Wissen.

Quote:
Originally Posted by D!zzl3 View Post
Kennst du ein gutes Buch? Sehe auf Amazon auf der ersten Seite gleich 12 Bücher mit Bewertungen +4 Sterne... Würde mich aber freuen wenn hier jemand ist der mehr Erfahrung hat mit C# und mir vlt. direkt eins empfehlen kann... deswegen frage ich auch ^^
Ich persönlich habe mir C# mit diesem Buch hier angeeignet: [Only registered and activated users can see links. Click Here To Register...]

Man mag mich jetzt vielleicht dafür hassen, dass ich ein Buch von Galileo Computing empfehle, jedoch fand ich das sehr angenehm & verständlich geschrieben, und ich habe bisher nichts gemerkt, was dort unzureichend erklärt worden ist.

Müsstest halt evtl schauen ob eine 2013/2014er Auflage bereits draussen ist, jedoch ist das 2012er auch jetzt noch aktuell, sollte somit kein Problem darstellen.
08/20/2014 21:46 'Heaven.#11
Falls du der englischen Sprache mächtig bist, würde ich dir dieses Buch empfehlen

[Only registered and activated users can see links. Click Here To Register...]

Gibt es auch als deutsche Ausgabe, aber ich würde immer englische Bücher deutschen vorziehen

OReilly macht eigentlich immer sehr gute Bücher, besitze selber 2 Stück von dem Verlag
08/20/2014 23:56 D!zzl3#12
Danke für die Empfehlungen, ich schaue gleich mal ob ich mir nicht sogar beide hole... Viele Wege führen nach Rom und wenn ich in dem einen Buch was nicht verstehe, könnte ich nachsehen was das zweite Buch dazu sagt ^^

Englisch ist immer gut... die meisten Tutorials finde ich im englischen sogar verständlicher als im Deutschen

Habe auch gerade ne gute Tutorialreihe gefunden auf der Seite [Only registered and activated users can see links. Click Here To Register...]... Der Bob Tabor dort hat ein paar sehr gute Videos veröffentlicht, bin bis jetzt begeistert, der erklärt das echt Kevin-sicher ^^ Also falls jemand in einer ähnlichen Lage wie ich ist kann der mal da reinschauen :P

Danke euch :) Ich melde mich die Wochen mal und gebe Feedback, hab ja noch Ferien :D Bin aber auch weiterhin für weitere Vorschläge offen ;)
08/21/2014 07:33 Mostey#13
[Only registered and activated users can see links. Click Here To Register...] - auch sehr stark.
08/21/2014 07:34 'Heaven.#14
C# in Depth ist aber nicht grade für Anfänger geeignet :x
08/21/2014 07:57 Mostey#15
Quote:
Originally Posted by 'Heaven. View Post
C# in Depth ist aber nicht grade für Anfänger geeignet :x
Hat ja niemand behauptet, trotzdem kann ich das Buch nur empfehlen. :) Grundlagen hat man ja sowieso schnell drauf, da setzt das Buch dann an wenn man sich in C# spezialisieren will.