21 svar
263 visningar
nifesoj behöver inte mer hjälp
nifesoj 25
Postad: 2 okt 2022 12:39

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);
  }
}

Laguna Online 30484
Postad: 2 okt 2022 12:56

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.

nifesoj 25
Postad: 2 okt 2022 13:43

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.

Laguna Online 30484
Postad: 2 okt 2022 14:11

Vad gjorde du med raden som jag pekade ut? Tog bort den?

nifesoj 25
Postad: 2 okt 2022 14:23

jag tog bara bort semikolon...mhm jag kanske ska ta bort hela..

nifesoj 25
Postad: 2 okt 2022 14:27

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.

Laguna Online 30484
Postad: 2 okt 2022 14:36

Den är i loopen hela tiden, men du läser in tal från användaren på två ställen.

nifesoj 25
Postad: 2 okt 2022 14:51

got it. nu fungerar det iallafall. 

Hur ska jag tänka med sista if den slutar inte när gissningarna 

nifesoj 25
Postad: 2 okt 2022 14:51

bör vara slut.

Laguna Online 30484
Postad: 2 okt 2022 14:53

Kan du visa en körning?

nifesoj 25
Postad: 2 okt 2022 14:58

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.

Laguna Online 30484
Postad: 2 okt 2022 15:07

Jag ser inte var 'guesses' definieras och sätts.

nifesoj 25
Postad: 2 okt 2022 15:47

//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. 

Laguna Online 30484
Postad: 2 okt 2022 15:56

Kan du visa hela programmet som det ser ut nu?

nifesoj 25
Postad: 2 okt 2022 16:13

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);

  }
}

Laguna Online 30484
Postad: 2 okt 2022 16:22

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.

nifesoj 25
Postad: 2 okt 2022 16:40

De

nifesoj 25
Postad: 2 okt 2022 16:40

 Det mesta blir rödmarkerat. I min första if-sats iallafall 

nifesoj 25
Postad: 2 okt 2022 16:46

Ska det visa på något? Att jag använt mina variabler fel?

Fermatrix 7841 – Fd. Medlem
Postad: 2 okt 2022 16:51

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. 

Laguna Online 30484
Postad: 2 okt 2022 16:55

Förmodligen. Går det att kompilera?

nifesoj 25
Postad: 2 okt 2022 17:33

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.

Svara
Close