5 svar
561 visningar
ximon är nöjd med hjälpen
ximon 7 – Fd. Medlem
Postad: 12 feb 2021 10:41 Redigerad: 12 feb 2021 12:01

Do While-loop samt If satsen. Kan ej hoppa ur loopen.

Mitt mål är att göra en frågesport där användaren skall gissa ett tal mellan 1-100. Jag är rätt säker på att jag inte är helt ute och cyklar (finns en chans att jag är), men det jag behöver hjälp med är att veta varför en variabel blir grå i slutet av en Do While-loop. Alla andra variabler av det namnet jag angett den till ("svar" är namnet) lyser blått för att indikera att de funkar men i slutet i villkorssatsen efter jag skrivit while, exempel:  "while (svar != slump_tal);" så är "svar" grått och när jag får rätt siffra så hoppar inte jag ur loopen för att skriva att användaren gissade rätt, jag antar att den är grå för att datorn tror att den aldrig kommer kunna utföra kommandot vilket det också verkar som. Så frågan är varför den inte kan hoppa ur loopen?

 

Sedan försöker jag också  göra så att när användaren är 3 eller mindre ifrån svaret så ska det skrivas ut att det är VÄLDIGT nära. Tror jag skrivit det fel men skulle gärna få input.

 

Uppskattar om jag inte bara får svar rakt upp och ner utan jag vill gärna förstå varför, tack till de som tar sig tiden att hjälpa.

using System;

namespace Dethemligatalet3
{
    class Program
    {
        private static int svar;

        static void Main(string[] args)
        {


            


            Random randomerare = new Random();
            int slump_tal = randomerare.Next(1, 101);
            int försök = 0;
            
            


               Console.WriteLine("GISSA DET HEMLIGA TALET OCH VINN EN KAKA");

            do
            {

                Console.Write("Gissa på ett tal mellan 1-100:    ");
                int svar = Convert.ToInt32(Console.ReadLine());
                försök++;

                if (svar < slump_tal)
                {
                    Console.WriteLine(försök + " försöket, svaret är för lågt, gissa igen!");

                }
                else if (svar > slump_tal)
                {
                    Console.WriteLine(försök + " försöket, svaret är för högt, gissa igen!");

                }
                if (svar == slump_tal +-3)
                {
                    Console.WriteLine(försök + " försöket, det är VÄLDIGT nära...");
                }

            } while (svar != slump_tal);
            

            
            Console.WriteLine("GRATTIS, du vann en kaka!");
            
            Console.ReadKey();
        }
    }
}
Yngve 37819 – Livehjälpare
Postad: 12 feb 2021 11:38 Redigerad: 12 feb 2021 11:39

Jagchar aldrig kodat C# men jag tror inte att man kan skriva så här:

Skriv istället något liknande

if (Math.Abs(svar-slump_tal) < 4)

{

}

ximon 7 – Fd. Medlem
Postad: 12 feb 2021 12:53

Jag löste felet nu. Det var att svaret måste lagras utanför Do While-loopen. 

Nu är det bara att klura på hur jag gör en else if för hur man skriver ut något om det är inom 3 siffror ifrån slump_talet..

ximon 7 – Fd. Medlem
Postad: 12 feb 2021 12:55
Yngve skrev:

Jagchar aldrig kodat C# men jag tror inte att man kan skriva så här:

Skriv istället något liknande

if (Math.Abs(svar-slump_tal) < 4)

{

}

Testade det utan framgång men ska testa att modifiera det lite och se om jag förstår vad som försiggår. Tack för svaret. 

datav 34
Postad: 12 feb 2021 14:38 Redigerad: 12 feb 2021 14:43
ximon skrev:

Såhär skulle du kunna göra :)

if(svar == slumptal){
    // du har vunnit!
}else if(svar > slumptal+3) {
    // försöket är för högt!
}else if(svar < slumptal-3){
    // försöket är för lågt!
}else {
    // försöket var väldigt nära!
}
Laguna 28468
Postad: 12 feb 2021 15:14 Redigerad: 12 feb 2021 15:17
ximon skrev:

Jag löste felet nu. Det var att svaret måste lagras utanför Do While-loopen. 

Nu är det bara att klura på hur jag gör en else if för hur man skriver ut något om det är inom 3 siffror ifrån slump_talet..

Ja, det 'svar' som används inuti loopen och det som används i testet nedanför loopen är två olika variabler. Den senare ändrar aldrig värde. Jag vet inte hur du ändrade, men den enklaste ändringen är att ta bort "int" i "int svar" inuti loopen.

Edit: slumptal +-3 tolkas troligen likadant som slumptal +(-3), vilket är samma som slumptal - 3.

Eventuellt kan man ordna så kompilatorn varnar för det första skrivsättet, eftersom man troligen menar något annat.

Svara Avbryt
Close