Entwickler-Ecke

Sonstiges (.NET) - Aus Schleife springen


interessierter - Mo 16.04.12 21:46
Titel: Aus Schleife springen
Hallo Zusammen

Ich stehe hier vor meinem letzten kleinen Problem um meinen Grundlagenlehrgang abzuschliessen. Danach krieg ich neuen Stoff ;D ;D

Ich werde nur den wesentlichen Teil des Codes ausführlich schreiben, den Rest in Kurzform.
Hoffe auf ein paar Wegweisende Tipps.

Zum Programm: (Konsolenprogramm c#)

Errate die Zahl:

1. Schritt Programm merkt sich via random Zufallszahl (zwischen 1 und 100)
2. Fragt User nach Eingabe einer Zahl
3. Wenn Zahl kleiner oder grösser 100, kommt Meldung Zahl muss grösser 1 und kleiner 100 sein
4. Wenn User eine Zahl zwischen 1 und 100 wählt, kommt neue Zahl eingeben

Bis hierhin klappt alles.

Nun kommt die Sache mit mittels break aus der Schleife zu springen, falls der User statt einer neuen Zahl "exit" eingibt.

Hier die bestehende Schleife:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
if (x != Zahl) //mit Zahl ist die Random Zahl gemeint

do
{
if (x< 1 || x >> 100
Console.WriteLine("muss zwischen 1 und 100 liegen");

if (x != Zahl)
Console.WriteLine("neue zahl eingeben");

Eingabe = Console.ReadLine();
x = int.Parse(Eingabe);

}while (x != Zahl);

Console.WriteLine("Glückwunsch, du hast die Zahl erraten");


Ich habe nun unzählige Varianten mittels break versucht um aus der Schlaufe zu kommen und so das Programm zu beenden, aber es will einfach nicht.

Grüsse
interessierter

Moderiert von user profile iconTh69: C#-Tags hinzugefügt


Ralf Jansen - Mo 16.04.12 22:23

Dein zu prüfender Text steht in der Eingabe Variablen. Denn muss du also gegen den "exit" Text prüfen. Das kannst du mit einer if-Verzweigung die wenn die Bedingung zutrifft break aufruft.

Eigentlich müsste das auch jetzt schon, mehr oder weniger, ~funktionieren~. Sobald du etwas eingibst das keine Zahl ist wie zum Beispiel den Text 'exit' sollte int.Parse knallen (eine Exception werfen) und das Programm beenden. Zumindest dann wenn dein Programm kein Exceptionhandling beinhaltet. Und ich vermute mal das wenn ihr gerade bei Schleifen und Verzweigungen seit das noch nicht gemacht habt. Du solltest also noch denn Fall behandeln das keine Zahl und auch nicht Text 'exit' eingegeben wurde.


ujr - Di 17.04.12 08:47

user profile iconinteressierter hat folgendes geschrieben Zum zitierten Posting springen:
CODE ENDE


Jetzt rat' mal, wofür es im Editor den "C#-Bereich" gibt...


interessierter - Mi 18.04.12 21:44


C#-Quelltext
1:
oke, danke für den Hinweis                    


interessierter - Mi 18.04.12 21:55

Das mit den Exeptions ist interessant, das hab ich mir gleich mal notiert in die to do Liste :)

Aber die oben beschriebene Schleife sollte ich auch so beenden können, sofern wir jetzt mal davon ausgehen das der User exit schreibt.

Ich habe es folgendermasen versucht. Unter die zweite If Anwewisung in der Schleife habe ich noch ein if geschrieben.


C#-Quelltext
1:
2:
3:
4:
if (Eingabe == "exit"
{
break;
}


Das Programm beendet, jedoch mit Programmabsturz. Kann es sein das ich die ganze Schleife nochmals in eine SChleife pachen muss? Oder braucht es das Exeption Handling zwingend?


Ralf Jansen - Mi 18.04.12 22:00

Nein. Ich vermute mal die 'x = int.Parse(Eingabe);' Zeile wird immer noch ausgeführt. So wie ich in meiner ersten Antwort ausgeführt habe darf die nur ausgeführt werden wenn du in der Eingabe Variable garantieren kannst das da nur Zahlen drin sind. Sonst Peng!


jaenicke - Mi 18.04.12 22:01

Du musst das nach die Zuweisung von Eingabe schreiben (sonst ist ja noch nix drin) und vor den Versuch den Wert in eine Zahl umzuwandeln (denn es ist ja keine Zahl, wenn exit drinsteht).

Bei der Umwandlung bietet sich TryParse statt Parse an. ;-)


interessierter - Mi 18.04.12 22:04

oke super, genau in diese Richtungen habe ich auch gedacht. War mir aber nicht ganz sicher.

Werde mal anahnd eurer Wegweisungen versuchen das Problem zu lösen. Muss gleich mal try.Parse anschauen.

Thanks und Greets
interessierter


interessierter - Do 19.04.12 01:31

Ich habe jetzt im Internet Theorien über try Parse gelesen und denke das Prinzip verstanden zu haben. Habe auch gleich einen kleinen Übungscode geschrieben der auch tut was er soll, :) um ein bisschen rumexperimentieren zu können. Der Code unterscheidet ob die Eingabe eine Zahl oder ein Wort ist und macht die entsprechende Ausgabe. Habe aber rein für das Verständiss trotzdem noch ein paar Fragen zu meinem Code.

Hier der Code:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
Console.WriteLine("entweder ein wort oder eine zahl eingeben");
string irgendetwas;
irgendetwas = Console.ReadLine();

int x; // Frage 1: Wozu dient diese int x? Was macht die genau und wieso geht es nicht ohne?

bool Eingabe = int.TryParse(irgendetwas, out x);
if (Eingabe == false)
{
Console.WriteLine("eingabe ist ein wort");
}
else
Console.WriteLine("eingabe ist eine zahl");


Frage 2: Ist dieser Beispiel Code in etwa das was ich brauche um mein Ratespiel fertig zu brigen?


Eine gute Naacht wünscht
interessierter


PantherX - Fr 20.04.12 09:01

Hallo,

zu Frage 1:
du benötigst x weil du für diese Art der Abfrage die du da hast, eine integer Variable benötigst.
im TryParse Befehl wird ja explizit x als Ausgabeziel angegeben. Er versucht deine Eingabe also in diese Variable zu schreiben,
und je nach Fall gibt er halt als Rückgabewert Erfolg (true) oder kein Erfolg (False) aus.

Ich persönlich halte nicht viel von solch "gedulteten" Exceptions im Programm, wüsste nun aber auch nich wie man es auf konsolen basis anders gestalten könnte :gruebel:

Beste Grüße