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



BeitragVerfasst: So 15.04.12 00:48 
Hallo Zusammen

Hab noch ne Frage zu meinem c# Konsolenprogramm.

Man gibt eine Zahl ein. Wenn die zahl kleiner 1 oder grösser 100 ist, soll das programm solange nach nach einer neuen zahl fragen bis die Bedingung erfüllt ist.

Ich habe angefangen den Code zu schreiben und für mich ist er irgendwie völlig logisch, jedoch tut das er nicht ganz das was ich will. Ich glaube es fehlt nur noch ein Detail.
Wenn ich bei der Eingabe etwas zwischen 1 und 100 eingebe klappt es. Wenn ich testhalber etwas unter 1 oder über 200 eingebe, hört die Schleife nicht mehr auf.
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
Console.WriteLine("Zahl eingeben");
string Eingabe;
Eingabe = Console.ReadLine();
float x = float.Parse(Eingabe);

if (x < 1 | x > 100)

do
{
Console.WriteLine("neue zahl eingeben");
Eingabe = Console.ReadLine();
{
while (x < 1 | x > 100);


CODE ENDE

Liebe Grüsse
interessierter

Moderiert von user profile iconKha: C#-Tags hinzugefügt
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: So 15.04.12 02:11 
Schau noch einmal nach, an welchen Stellen du überhaupt x veränderst ;) .

_________________
>λ=
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4799
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: So 15.04.12 11:27 
Und desweiteren verwendest du den falschen Operator, benutze anstatt dem binären Operator | den logischen Operator ||.
interessierter Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75



BeitragVerfasst: So 15.04.12 15:22 
Ich habe meinen Code nochmals Schrittweise analysiert, aber kann nicht erkennen wo der Fehler liegt.

Meiner Auffassung nach verändere ich x nie. Einfach formuliert sage ich dem Computer ja folgendes:

1. Lies eine Zahl ein (wenn Zahl oke gebe Zahl aus)
sonst
2. Wenn Zahl kleiner 1 oder grösser hundert
3. Frage so lange nach eienr Zahl und lies sie ein, wie die Eingabe immernoch kleiner 1 oder grösser 100 ist

Wo liegt mein Denkfehler?
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4799
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: So 15.04.12 15:46 
Genau das ist ja dein Denkfehler: du fragst in der Schleife immer den Wert von x ab, änderst diesen aber nie - ergo Endlosschleife!
Du mußt natürlich auch in der Schleife die Eingabe nochmals mittels x = float.Parse(Eingabe); parsen.

P.S. Die Parse-Methode hat den Nachteil, daß eine Exception geworfen wird, wenn keine Zahl vorliegt - besser ist die Verwendung der TryParse-Methode.

Für diesen Beitrag haben gedankt: interessierter
interessierter Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75



BeitragVerfasst: So 15.04.12 15:53 
jetzt verstehe ich :) :)

Ganz einfach ausgedrückt, weiss das Programm innerhalb der Schleifedann nicht mehr das es
ein float.Parse ist. Deswegen muss ich dann nochmals sagen das es ein float.parse ist.

Jetzt ist mir natürlich alles sofort klar. Danke für den Hinweis mit try.parse. Werde mich mal erkundigen wie das zu benutzen ist.

Herzlichen Dank

Grüsse
interessierter