Gissa talet uppgift Do while loop
Hallå gott folk!
Jag läser Prog 1 och jag har fått i uppgift att skriva ett program som heter Gissa talet. Det mesta har gått bra tycker jag men det är några saker som jag inte riktigt får till. Första problemet är att när man gissar rätt tal så skriver inte programmet ut "Grattis meddelandet". Efter 10 försök så ska programmet skriva ut ett annat meddelande vilket det gör men när man trycker på Enter så skriver den ut "Grattis meddelandet" gång efter gång istället för att avsluta programmet. Har ni några förslag på vad jag gör för fel? Se koden nedanför!
Random random = new Random();
int slumpTal = random.Next(1, 101);
int antalGissningar = 1;
int guessLimit = 10;// Efter 10 försök skall programmet avslutas!
Console.WriteLine("Hej och välkommen till GISSA TALET!");
Console.WriteLine("Skriv in ett tal mellan 1 och 100:");
int tal = Convert.ToInt32(Console.ReadLine()); // Användarens input konventeras från en STR till en INT
do //Gör det som står nedan...
{
if (tal < slumpTal)// Är det gissade talet lägre än det slumpade talet?
{
Console.WriteLine("Du gissade fel. Skriv in ett större tal");// Gissa högre!
}
else if (tal > slumpTal) //Är det gissade talet högre än det slumpade talet?
{
Console.WriteLine("Du gissade fel. Skriv in ett lägre tal!");//Gissa lägre!
}
tal = Convert.ToInt32(Console.ReadLine());
antalGissningar++;
}
while (antalGissningar < guessLimit);// Loopen fortsätter så länge antalet gissningar är lägre än "guessLimit".
{
Console.WriteLine("Kunde du inte gissa rätt trots 10 försök?");
Console.WriteLine("Bättre lycka nästa gång!");
Console.ReadLine();
//PROBLEM-Programmet skall avslutas efter 10 försök men när man trycker på enter så skrivs Grattis meddelandet ut.
while (tal != slumpTal) //Loopen fortsätter så länge det gissade talet INTE är lika med det slumpade talet.
{
Console.WriteLine("Grattis! Du gissade rätt!");
Console.WriteLine("Antal gissningar:" + antalGissningar);
Console.ReadLine();
//PROBLEM- När man gissar rätt tal så skrivs inte Grattis meddelandet ut.
}
}
I if-satsen testar du bara om gissningen är mindre eller större och inte om det är rätt.
Du behöver alltså en else till med lyckönskan och 'break' ( eller hur du bryter dig ur en loop i det här språket )
Sen vill du ju inte skriva oturmeddelandet när hen lyckats alltså en ny if efter loopen
Programmet fungerar som den ska om jag tar bort det första villkoret ( antalGissningar<guessLimit). Då skriver den ut Grattis när man gissar rätt så då behövs ju inte en else.
matsC skrev:I if-satsen testar du bara om gissningen är mindre eller större och inte om det är rätt.
Du behöver alltså en else till med lyckönskan och 'break' ( eller hur du bryter dig ur en loop i det här språket )
Sen vill du ju inte skriva oturmeddelandet när hen lyckats alltså en ny if efter loopen
Hallå igen,
Nu har jag skrivit till else samt en del annat så nu funkar det. Tack för hjälpen!
Jag har dock ytterligare en fråga. När man gissar fel tio ggr så avslutas inte programmet utan man är tvungen att trycka på Ctrl+C för att avsluta. Något tips på hur jag löser detta? Koden ser ut så här nu. Se nedan!
***************************************************************************************************
Random random = new Random();
int slumpTal = random.Next(1, 101);
int antalGissningar = 1;
int guessLimit = 10;// Efter 10 försök skall programmet avslutas!
Console.WriteLine("Hej och välkommen till GISSA TALET!");
Console.WriteLine("Skriv in ett tal mellan 1 och 100:");
int tal = Convert.ToInt32(Console.ReadLine());
do //Gör det som står nedan...
{
if (tal < slumpTal)// Är det gissade talet lägre än det slumpade talet?
{
Console.WriteLine("Du gissade fel. Skriv in ett större tal");// Gissa högre!
}
else if (tal > slumpTal) //Är det gissade talet högre än det slumpade talet?
{
Console.WriteLine("Du gissade fel. Skriv in ett lägre tal!");//Gissa lägre!
}
else
{
Console.WriteLine("Grattis! Du gissade rätt!");// Skriv annars ut Grattis + antal försök det tog att gissa rätt.
Console.WriteLine("Antal gissningar:" + antalGissningar);
Console.ReadLine();
break;
}
tal = Convert.ToInt32(Console.ReadLine());// Användarens input konventeras från en STR till en INT
antalGissningar++;
}
while (antalGissningar != guessLimit);// Loopen fortsätter så länge antalet gissningar inte är lika med "guessLimit".
if (antalGissningar == guessLimit && tal != slumpTal) //Skriv ut följande meddelande om antal gissningar är lika med guessLimit men
//tal är inte lika med slumptal.
{
Console.WriteLine("Kunde du inte gissa rätt trots 10 försök?");
Console.WriteLine("Bättre lycka nästa gång!");
Console.ReadLine();
}
else if (antalGissningar==guessLimit && tal == slumpTal)// Skriv ut följande meddelande om antal gissningar är lika med guessLimit
{ // & tal är lika med slumptal.
Console.WriteLine("Grattis! Du gissade rätt!");
Console.WriteLine("Antal gissningar:" + antalGissningar);
Console.ReadLine();
}
while (tal != slumpTal) ; //Loopen fortsätter så länge det gissade talet INTE är lika med det slumpade talet.
Sista while (tal != slumpTal) loopen du har. Vad är tal och slumpTal när man väl kommer dit i koden? ;)
rfloren skrev:Sista while (tal != slumpTal) loopen du har. Vad är tal och slumpTal när man väl kommer dit i koden? ;)
Hallå igen,
Jag löste det så här-while (tal != slumpTal && antalGissningar != guessLimit).
Tack för hjälpen!