Laden...

Wie kann ich in einer While-Schleife prüfen, ob ein Maximalgebot erreicht ist?

Erstellt von AnoriOne vor 3 Jahren Letzter Beitrag vor 3 Jahren 708 Views
A
AnoriOne Themenstarter:in
2 Beiträge seit 2020
vor 3 Jahren
Wie kann ich in einer While-Schleife prüfen, ob ein Maximalgebot erreicht ist?

Ich versuche gerade eine Aufgabe in Sololearn zu meistern, scheitere aber jämmerlich ???

Create a program for auction with a maximum bid set.

Mein Code:


static void Main(string[] args)
        {
            int maxBid = Convert.ToInt32(Console.ReadLine());
               
                   while(true)
                   {
                   string ins = Console.ReadLine();
                   int Bid = Convert.ToInt32(ins);
                     
                     if (Bid > maxBid);
                     {
                     Console.WriteLine("Sold:" + Bid);
                     break;
                     }
                   }
            
        }


Der erste eingegebene Wert soll den maximalen Wert bestimmen. Alle folgenden Eingaben jeweils Gebote. Wenn ein Gebot den max. Wert überschreitet soll verkauft für: ausgegeben werden.

Danke im vorraus für eure Hilfe!

Neuling in C#

1.029 Beiträge seit 2010
vor 3 Jahren

Hi,

grundlegend hilft es (wenn du Hilfe haben möchtest), wenn du beschreibst welches Problem du überhaupt hast.

Direkt offensichtlich:
Da ist ein Semikolon, welches dort nicht hingehört bei: "if (Bid > maxBid);"
(Das hindert das Programm allerdings nicht - es ist nur unnötig)

Bei Ausführung des Codes lässt sich meinerseits feststellen, dass dieser sich verhält wie zu erwarten - nämlich:

Solange die Eingabe < erste Eingabe ist hängt man in der while-Schleife. Gibt man was größeres ein - ist das Programm zu Ende. (Es schreibt sogar "Sold:<Number>" - das Programm ist dann nur so schnell zu, dass du es nicht mehr siehst...)

Sofern das dein Problem ist bin ich sicher, dass du eine Methode aus dem System.Console-Bereich findest, die es dem Nutzer ermöglicht zu sehen was passiert.

LG

J
251 Beiträge seit 2012
vor 3 Jahren

Das Semikolon sorgt dafür, dass folgendes ausgeführt wird, wenn "True": Nichts.
Und darauf folgt, dass jede (numerische) Eingabe die Schleife beendet.

1.029 Beiträge seit 2010
vor 3 Jahren

Das Semikolon sorgt dafür, dass folgendes ausgeführt wird, wenn "True": Nichts.
Und darauf folgt, dass jede (numerische) Eingabe die Schleife beendet.

Urgh - hast Recht - hatte das Semikolon bei meinem ersten Test direkt gestrichen, weil's nicht hingehört und beim zweiten Test direkt eine höhere Zahl eingegeben. (Hab so nen Fehler noch nie gesehen)

5.657 Beiträge seit 2006
vor 3 Jahren

Wenn ein Programm nicht tut, was es eigentlich tun sollte, kann man immer den Debugger verwenden, um den Programmablauf nachzuvollziehen: [Artikel] Debugger: Wie verwende ich den von Visual Studio?

Weeks of programming can save you hours of planning

M
368 Beiträge seit 2006
vor 3 Jahren

Der Hinweis von wg. Debugger gilt für VS, vielleicht nicht für Sololearn
Aber zwecks eines Erfolgserlebnisses (vorige Hinweise wurden eingearbeitet):

 static void Main(string[] args)
        {
            Console.WriteLine("Bitte Wunschpreis eingeben :");
            int maxBid = Convert.ToInt32(Console.ReadLine());
               //gilt nur für (negative) Ganzzahlen, ebenso die Gebote
            while (true)
            {
                Console.WriteLine("Bitte ihr Gebot eingeben: ");
                string ins = Console.ReadLine();
                int Bid = Convert.ToInt32(ins);

                if (Bid > maxBid) 
                {
                    Console.WriteLine("Sold: " + Bid);
                    Console.WriteLine("Enter drücken zum Beenden");
                    Console.ReadLine();
                    break;
                }
            }  

Goalkicker.com // DNC Magazine for .NET Developers // .NET Blogs zum Folgen
Software is like cathedrals: first we build them, then we pray 😉

A
AnoriOne Themenstarter:in
2 Beiträge seit 2020
vor 3 Jahren

Debuggen in SoloLearn ist tatsächlich eher rudimentär. Es sagt mir nur, wenn und wo offensichtliche Fehler im Code sind.

Aber die richtige Ausführung - wie es mein Lernprogramm erwartete - lag tatsächlich nur am Semikolon hinter der if-Anweisung. Und natürlich das fehlende Leerzeichen in der Ausgabe.


static void Main(string[] args)
        {
            
            int maxBid = Convert.ToInt32(Console.ReadLine());

            //your code goes here
            
                 while(true)
                   {
                   string insert = Console.ReadLine();
                   int Bid = Convert.ToInt32(insert);
                     
                     if (Bid > maxBid)
                     {
                     Console.WriteLine("Sold: " + Bid);
                     break;
                     }
                   }
            
        }

Danke für die Hilfe. Es ist am Anfang immer etwas schwierig, sich in eine neue Materie einzudenken. Aber wenn Dinge dann funktionieren wie gedacht, ist es ein riesen Spass 😃

Neuling in C#

T
2.219 Beiträge seit 2008
vor 3 Jahren

Als kleiner Tipp.
Für diesen Fall nimmt man eigentlich eine do...while Schleife.
Dadurch muss der Durchlauf erst einmal gemacht werden, also die Eingabe erfolgen.
Wenn dann bei der ersten Eingabe der Wert Max entspricht, erledigt sich die Schleife selbst.
Ansonsten würde er den nächsten und übernächsten Ansatz nehmen.
Dadurch hast du dann auch gleich anstelle einer while(true) eine saubere do...while Schleife.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.