do-while loop. `do´loopar inte (varje gång).
har försökt flytta runt på mina variabler för att få do while-loop att fungera. Först loopade den bara varannan gång( då hade jag bara mina if-satser och inte det efter break; , nu itererar den inte alls efter jag har lagt till utfall/villkor om guessLimit.
Här är senaste koden där do bara körs igenom en gång, sen kommer inte ("Skriv in ditt tal") upp igen:
using System;
class Program {
public static void Main (string[] args) {
Random randomNumber = new Random();
//Satt random till 54 för att kolla att koden är rätt
int number = 54;
int guess = 0;
//hur många gånger man får gissa
int guessLimit = 10;
Console.Clear();
//Välkomna spelaren och presentera spelet
Console.WriteLine("Välkommen till spelet GISSA TALET\n");
//Ge spelinstruktioner till användaren
Console.WriteLine("Försök gissa på ett hemligt tal\nmellan 1 och 100 på tio försök\n");
do{
Console.WriteLine("Skriv in ditt tal");
guess=Convert.ToInt32(Console.ReadLine());
guesses ++;
guessLimit --;
If (guess > number){
Console.WriteLine("Ditt tal är för stort. Gissa på ett mindre tal.");
if (Math.Abs(guess-number) <= 3){
Console.WriteLine("Men du är nära och det bränns.");
}
Console.WriteLine("Du har " +guessLimit+" gissningar kvar.");
}
else if (guess < number){
Console.WriteLine("Ditt tal är för litet. Gissa på ett större tal");
if (Math.Abs(guess-number) <= 3){
Console.WriteLine("Men du är nära och det bränns.");
}
Console.WriteLine("Du har " +guessLimit+" gissningar kvar.");
}
else{
Console.WriteLine("GRATTIS! Du gissade rätt. Du behövde " +guesses+ " gissningar på dig.");
Console.ReadLine();
break;
}
guess = Convert.ToInt32(Console.ReadLine());
guesses++;
guessLimit --;
while (guesses != guessLimit);
if (guesses == guessLimit && guess != number){
Console.WriteLine("Dina gissningar är slut. Bättre lycka nästa gång.\nDet hemliga talet var "+number+".");
Console.ReadLine();
}
else if (guesses == guessLimit && guess == number ){
Console.WriteLine("Gattis! Du gissade rätt. Du behövde "+ guesses +" gissningar på dig.");
Console.ReadLine();
}
}while (guess != number && guesses != guessLimit);
}
}
Den här
while (guesses != guessLimit)
utför det som står till nästa semikolon, dvs. ingenting alls, eftersom det står så här
while (guesses != guessLimit);
Det kanske finns andra fel, men det här såg jag först.
ja det ser jag nu. Tack.
Men på sista while så vill den att semikolon ska stå där så den kan jag inte ändra.
Det måste vara fler fel ja för den vill ändå inte köra.
Vad gjorde du med raden som jag pekade ut? Tog bort den?
jag tog bara bort semikolon...mhm jag kanske ska ta bort hela..
Nu går den in i loopen varannan gång. Det va det problemet jag hade innan/nästan från början.
Jag får skriva in ett tal utan do och efter Enter så hoppar den in i loopen igen.
Den är i loopen hela tiden, men du läser in tal från användaren på två ställen.
got it. nu fungerar det iallafall.
Hur ska jag tänka med sista if den slutar inte när gissningarna
bör vara slut.
Kan du visa en körning?
Välkommen till spelet GISSA TALET
Försök gissa på ett hemligt tal
mellan 1 och 100 på tio försök
Skriv in ditt tal
9
Ditt tal är för litet. Gissa på ett större tal
Du har 9 gissningar kvar.
Skriv in ditt tal
90
Ditt tal är för stort. Gissa på ett mindre tal.
Du har 8 gissningar kvar.
Skriv in ditt tal
33
Ditt tal är för litet. Gissa på ett större tal
Du har 7 gissningar kvar.
Skriv in ditt tal
52
Ditt tal är för litet. Gissa på ett större tal
Men du är nära och det bränns.
Du har 6 gissningar kvar.
Skriv in ditt tal
12
Ditt tal är för litet. Gissa på ett större tal
Du har 5 gissningar kvar.
Skriv in ditt tal
74
Ditt tal är för stort. Gissa på ett mindre tal.
Du har 4 gissningar kvar.
Skriv in ditt tal
38
Ditt tal är för litet. Gissa på ett större tal
Du har 3 gissningar kvar.
Skriv in ditt tal
57
Ditt tal är för stort. Gissa på ett mindre tal.
Men du är nära och det bränns.
Du har 2 gissningar kvar.
Skriv in ditt tal
3
Ditt tal är för litet. Gissa på ett större tal
Du har 1 gissningar kvar.
Skriv in ditt tal
88
Ditt tal är för stort. Gissa på ett mindre tal.
Du har 0 gissningar kvar.
Skriv in ditt tal
55
Ditt tal är för stort. Gissa på ett mindre tal.
Men du är nära och det bränns.
Du har -1 gissningar kvar.
Skriv in ditt tal
55
Ditt tal är för stort. Gissa på ett mindre tal.
Men du är nära och det bränns.
Du har -2 gissningar kvar.
Skriv in ditt tal
54
GRATTIS! Du gissade rätt. Du behövde 12 gissningar på dig.
Tryck Enter för att avsluta.
Jag ser inte var 'guesses' definieras och sätts.
//användarens gissningar
int guess = 0;
//gissningar gjorda
int guesses = 0;
//hur många gånger man får gissa
int guessLimit = 10;
Har skrivit den i början av koden. Vet inte varför den inte kom med i första inlägget.
Kan du visa hela programmet som det ser ut nu?
using System;
class Program {
public static void Main (string[] args) {
Random randomNumber = new Random();
//namnge din variabel och sätt gräns på talet som skall gissas
int number = 54;
//användarens gissningar
int guess = 0;
//gissningar gjorda
int guesses = 0;
//hur många gånger man får gissa
int guessLimit = 10;
Console.Clear();
//Välkomna spelaren och presentera spelet
Console.WriteLine("Välkommen till spelet GISSA TALET\n");
//Ge spelinstruktioner till användaren
Console.WriteLine("Försök gissa på ett hemligt tal\nmellan 1 och 100 på tio försök\n");
do{
Console.WriteLine("Skriv in ditt tal");
//Konvertera gissningen till heltal
guess = Convert.ToInt32(Console.ReadLine());
guesses ++;
guessLimit --;
if (guess > number){
Console.WriteLine("Ditt tal är för stort. Gissa på ett mindre tal.");
if (Math.Abs(guess-number) <= 3){
Console.WriteLine("Men du är nära och det bränns.");
}
Console.WriteLine("Du har " +guessLimit+" gissningar kvar.");
}
else if (guess < number){
Console.WriteLine("Ditt tal är för litet. Gissa på ett större tal");
if (Math.Abs(guess-number) <= 3){
Console.WriteLine("Men du är nära och det bränns.");
}
Console.WriteLine("Du har " +guessLimit+" gissningar kvar.");
}
else{
Console.WriteLine("GRATTIS! Du gissade rätt. Du behövde " +guesses+ " gissningar på dig.\n");
Console.WriteLine("Tryck Enter för att avsluta.");
Console.ReadLine();
break;
}
if (guesses == guessLimit && guess != number){
Console.WriteLine("Dina gissningar är slut. Bättre lycka nästa gång.\nDet hemliga talet var "+number+".\n");
Console.WriteLine("Tryck Enter för att avsluta.");
Console.ReadLine();
}
else if (guesses == guessLimit && guess == number ){
Console.WriteLine("Gattis! Du gissade rätt. Du behövde "+ guesses +" gissningar på dig.\n");
Console.WriteLine("Tryck Enter för att avsluta.");
Console.ReadLine();
}
}while (guess != number && guesses != guessLimit);
}
}
Stoppa in en rad före
if (guesses == guessLimit && guess != number){
som skriver ut guesses, guessLimit, guess och number, så vi ser vad som händer.
De
Det mesta blir rödmarkerat. I min första if-sats iallafall
Ska det visa på något? Att jag använt mina variabler fel?
Du ökar på antal gissnigar men samtidigt ändrar du din gräns?
Dessa möts ju i mitten vid 5, varför gör du så?
Låt max gissningar vara 10, och ändra den inte. Varje gång vi gissar så ökar vi en variabel som håller koll på våra gissningar. När våra gissningar == Limit, då har vi förlorat.
Förmodligen. Går det att kompilera?
Det är inte lätt att veta när man inte vet :)
Tack för hjälpen!!!
Jag förstår hur det fungerar nu och koden gör det jag vill.