Autor Beitrag
interessierter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75



BeitragVerfasst: Mo 16.04.12 21:46 
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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 102
Erhaltene Danke: 12



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75



BeitragVerfasst: Mi 18.04.12 21:44 
ausblenden C#-Quelltext
1:
oke, danke für den Hinweis					
interessierter Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75



BeitragVerfasst: 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.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19326
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75



BeitragVerfasst: 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:

ausblenden 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


Zuletzt bearbeitet von interessierter am Fr 20.04.12 21:38, insgesamt 1-mal bearbeitet
PantherX
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 43
Erhaltene Danke: 7

Win XP, Win 7
Delphi 7, VS2010 C#
BeitragVerfasst: 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

_________________
Grafische Oberflächen sind wie U-Boote. Kaum macht man ein Fenster auf, fangen die Probleme an!

Für diesen Beitrag haben gedankt: interessierter