Permalänk

Loop vill inte stanna

Hej
Håller på att skapa ett gissa tal spel med en meny där du väljer start, highscore eller quit.
koden ser ut så här idag.

men mitt problem är att loopen bara rullar och låter mig inte välja i menyn någon som har en förklaring
vad det kan bero på eller kan förklara hur jag kan göra...

här är hela koden:

while (true)
{
WriteLine("Välj: ");
WriteLine("[S]pela spelet");
WriteLine("[H]ighscore");
WriteLine("[Q]uit");
}
string menySelection = ReadLine().ToUpper();
if (menySelection == "S")
{
WriteLine("======= VÄLKOMMEN TILL SPELET!");

}
else if (menySelection == "H")
{
WriteLine("=====HIGHSCORE======");
}
else if (menySelection == "Q")
{
Environment.Exit(0);
}
else
{
WriteLine("Ogiltigt val!");
}
// While loop gissa nummret
WriteLine("Gissa ett nummer mellan 0 och 100");
string str = Console.ReadLine();
int tal = Convert.ToInt32(str);
while (tal != 25)
{
WriteLine("Fel gissa igen! ");
str = Console.ReadLine();
tal = Convert.ToInt32(str);
}
WriteLine("Grattis du gissa rätt! ");

ReadKey();

Tack på förhand

Permalänk
Medlem

while (true) loopar massa utmatningar i jääääte hög hastighet...förstår om du aldrig hinner välja något.

Visa signatur

5700x3D | RTX 2060 Super | 2 TB M.2 | 32 GB RAM | Gigabyte DS3H| 750 WATT

Permalänk
Medlem

Slutmåsvingen för while-loopen är placerad innan dina if-satser, därav kommer koden nedan aldrig att köras.

while (true) { WriteLine("Välj: "); WriteLine("[S]pela spelet"); WriteLine("[H]ighscore"); WriteLine("[Q]uit"); } // Dina if-statements ligger här...

Permalänk
Medlem
Skrivet av DavidFast:

Hej
Håller på att skapa ett gissa tal spel med en meny där du väljer start, highscore eller quit.
koden ser ut så här idag.
<Uppladdad bildlänk>

men mitt problem är att loopen bara rullar och låter mig inte välja i menyn någon som har en förklaring
vad det kan bero på eller kan förklara hur jag kan göra...

här är hela koden:

while (true)
{
WriteLine("Välj: ");
WriteLine("[S]pela spelet");
WriteLine("[H]ighscore");
WriteLine("[Q]uit");
}
string menySelection = ReadLine().ToUpper();
if (menySelection == "S")
{
WriteLine("======= VÄLKOMMEN TILL SPELET!");

}
else if (menySelection == "H")
{
WriteLine("=====HIGHSCORE======");
}
else if (menySelection == "Q")
{
Environment.Exit(0);
}
else
{
WriteLine("Ogiltigt val!");
}
// While loop gissa nummret
WriteLine("Gissa ett nummer mellan 0 och 100");
string str = Console.ReadLine();
int tal = Convert.ToInt32(str);
while (tal != 25)
{
WriteLine("Fel gissa igen! ");
str = Console.ReadLine();
tal = Convert.ToInt32(str);
}
WriteLine("Grattis du gissa rätt! ");

ReadKey();

Tack på förhand

Lite ledande fråga: vilka rader är det som skall loopas och hur är det markerat i koden?

Ur ett större perspektiv så lär du ha enorm hjälp av att lära dig att använda debuggern iaf på något slags grundläggande nivå. Kommer öka förståelsen för vad som pågår något enormt och hjälpa både lärande och felsökande för alltid.

Visa signatur

Desktop: Ryzen 5800X3D || MSI X570S Edge Max Wifi || Sapphire Pulse RX 7900 XTX || Gskill Trident Z 3600 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Skrivet av evil penguin:

Lite ledande fråga: vilka rader är det som skall loopas och hur är det markerat i koden?

Ur ett större perspektiv så lär du ha enorm hjälp av att lära dig att använda debuggern iaf på något slags grundläggande nivå. Kommer öka förståelsen för vad som pågår något enormt och hjälpa både lärande och felsökande för alltid.

okej får läsa igen den och se om jag hittar lösningen eller vad det är som pågår varför jag inte kan välja.

på den andra frågan är det if lopen antar jag att det blir

Permalänk

[quote postid="20409201" userid="25594" name="Dalton Sleeper"]
Slutmåsvingen för while-loopen är placerad innan dina if-satser, därav kommer koden nedan aldrig att köras.

while (true) { WriteLine("Välj: "); WriteLine("[S]pela spelet"); WriteLine("[H]ighscore"); WriteLine("[Q]uit"); } // Dina if-statements ligger här...

[/quote

menar du att allt ska ligga i if satsen

Permalänk
Medlem
Skrivet av DavidFast:

[quote postid="20409201" userid="25594" name="Dalton Sleeper"]
Slutmåsvingen för while-loopen är placerad innan dina if-satser, därav kommer koden nedan aldrig att köras.

while (true) { WriteLine("Välj: "); WriteLine("[S]pela spelet"); WriteLine("[H]ighscore"); WriteLine("[Q]uit"); } // Dina if-statements ligger här...

[/quote

menar du att allt ska ligga i if satsen

Nej, däremot bör nog allt ligga i while-loopen.

Men som sagt, rekommenderar starkt att lägga en liten stund på att lära sig att använda debuggern... Bättre investering ju tidigare det görs, i princip.

Visa signatur

Desktop: Ryzen 5800X3D || MSI X570S Edge Max Wifi || Sapphire Pulse RX 7900 XTX || Gskill Trident Z 3600 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Skrivet av FX9:

while (true) loopar massa utmatningar i jääääte hög hastighet...förstår om du aldrig hinner välja något.

ska det inte vara whil (true) vad ska det vara iså fall

Permalänk
Skrivet av evil penguin:

Nej, däremot bör nog allt ligga i while-loopen.

Men som sagt, rekommenderar starkt att lägga en liten stund på att lära sig att använda debuggern... Bättre investering ju tidigare det görs, i princip.

kan försöka med det men känns som att det blir fel men jag är ingen expert på ämnet utan jag är ju bara nybörjare men sbsolut kan försöka med det..

Permalänk
Skrivet av evil penguin:

Nej, däremot bör nog allt ligga i while-loopen.

Men som sagt, rekommenderar starkt att lägga en liten stund på att lära sig att använda debuggern... Bättre investering ju tidigare det görs, i princip.

true får läsa på och testa mig fram men tack för tipsen och hjälpen

Permalänk
Skrivet av DavidFast:

kan försöka med det men känns som att det blir fel men jag är ingen expert på ämnet utan jag är ju bara nybörjare men sbsolut kan försöka med det..

har gåt igenom första delen av koden steg för steg och den går aldring in i if stasen

Permalänk
Medlem

Vet ej om du kör Visual Studio eller annat, men lär dig att sätta en break-point (F9 i Visual Studio), på första raden i ditt program, sedan F5 för att starta programmet, F10 för att hoppa ett steg i taget i programmet. Använd sedan F10 gång på gång för att se hur programmet beter sig!

While-loopen kan användas i ditt fall utan problem; det är en väldigt liten fix för att ditt program skall fungera. While loopar endast det som står innanför klamrarna tills något säger till programmet att avsluta, eller säger till att loopen skall sluta. Just nu loopar den det som står innanför klamrarna i all oändlighet, och jag gissar att det inte är vad du vill.

Permalänk
Skrivet av Dalton Sleeper:

Vet ej om du kör Visual Studio eller annat, men lär dig att sätta en break-point (F9 i Visual Studio), på första raden i ditt program, sedan F5 för att starta programmet, F10 för att hoppa ett steg i taget i programmet. Använd sedan F10 gång på gång för att se hur programmet beter sig!

While-loopen kan användas i ditt fall utan problem; det är en väldigt liten fix för att ditt program skall fungera. While loopar endast det som står innanför klamrarna tills något säger till programmet att avsluta, eller säger till att loopen skall sluta. Just nu loopar den det som står innanför klamrarna i all oändlighet, och jag gissar att det inte är vad du vill.

jag kör visuel studio2022 jag har kört med break och den loopar bara menyn och och går aldrig in i if stasen, det är ju som sagt vad inte vad jag vill

Permalänk
Medlem
Skrivet av DavidFast:

jag kör visuel studio2022 jag har kört med break och den loopar bara menyn och och går aldrig in i if stasen, det är ju som sagt vad inte vad jag vill

Precis, då texten i din loop ställer frågor som du med tangentbordet skall besvara, då är det väll lämpligt att inläsning av knapptryck, samt if-satserna körs inne i while-loopen, direkt efter dina writelines?

Ett program är rätt logiskt, eller väldigt logiskt, det gör inget av sig själv.
Det kan vara bra att lista det som skall göras på ett papper eller i notepad.

* skriv ut frågor * läs in text från knapptryck * titta på text och gör det som efterfrågas, exempelvis avsluta programmet

Det ser ut som designen på programmet tillåter användaren att ställe frågor efter varandra, därav while-loopen.

Just nu ser det ut så här:

loop { * skriv ut frågor } * läs in text från knapptryck * titta på text och gör det som efterfrågas, exempelvis avsluta programmet

Men det kanske borde se ut så här?

loop { * skriv ut frågor * läs in text från knapptryck * titta på text och gör det som efterfrågas, exempelvis avsluta programmet }

Permalänk
Medlem
Skrivet av DavidFast:

ska det inte vara whil (true) vad ska det vara iså fall

Den delen är rätt, men ser att andra gett mer detaljerade svar

Visa signatur

5700x3D | RTX 2060 Super | 2 TB M.2 | 32 GB RAM | Gigabyte DS3H| 750 WATT

Permalänk
Skrivet av DavidFast:

Hej
Håller på att skapa ett gissa tal spel med en meny där du väljer start, highscore eller quit.
koden ser ut så här idag.
<Uppladdad bildlänk>

men mitt problem är att loopen bara rullar och låter mig inte välja i menyn någon som har en förklaring
vad det kan bero på eller kan förklara hur jag kan göra...

här är hela koden:

while (true)
{
WriteLine("Välj: ");
WriteLine("[S]pela spelet");
WriteLine("[H]ighscore");
WriteLine("[Q]uit");
}
string menySelection = ReadLine().ToUpper();
if (menySelection == "S")
{
WriteLine("======= VÄLKOMMEN TILL SPELET!");

}
else if (menySelection == "H")
{
WriteLine("=====HIGHSCORE======");
}
else if (menySelection == "Q")
{
Environment.Exit(0);
}
else
{
WriteLine("Ogiltigt val!");
}
// While loop gissa nummret
WriteLine("Gissa ett nummer mellan 0 och 100");
string str = Console.ReadLine();
int tal = Convert.ToInt32(str);
while (tal != 25)
{
WriteLine("Fel gissa igen! ");
str = Console.ReadLine();
tal = Convert.ToInt32(str);
}
WriteLine("Grattis du gissa rätt! ");

ReadKey();

Tack på förhand

Din loop loopar endast igenom att skriva ut saker (WriteLine()). Varje gång du har skrivit ut menylistan så vill du ha din ReadLine().ToUpper()-funktion inuti i samma loop. Sedan vill du köra dina if-satser - också inuti samma loop.

Prova gärna att lägga din menySelection-variabel ovanför loopen och gör den tom (string menySelection = "";). Sedan börjar din loop och du har samma menySelection = ReadLine().ToUpper()-funktion inuti loopen efter alla WriteLine().

Sedan klistrar du in dina if- & else-satser inuti loopen som så klart kommer efter ReadLine().ToUpper(). Om du vill att något ska visas när loopen hoppas ut (dvs., när du skriver break; inuti loopen) så kan du göra så att else { break; } som då hoppar ut ur loopen. Och så visar du det som ska visas efter uthoppad loop.

Jag hade en sådan här lösning i en inlämningsuppgift i min introduktionskurs inom C#.NET. Jag hade till och med loopar inuti loopar: loop för menyval -> loop för invänta korrekt data efter menyval -> sedan skriva ut rätt data och tillbaka till menyval igen.

Mvh,
WKL.

Visa signatur

<WKL:"En kodrad i taget!";/>