5 svar
138 visningar
ximon är nöjd med hjälpen
ximon 7
Postad: 12 feb 10:41 Redigerad: 12 feb 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 21613 – Volontär digitala räknestugor
Postad: 12 feb 11:38 Redigerad: 12 feb 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
Postad: 12 feb 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
Postad: 12 feb 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 26
Postad: 12 feb 14:38 Redigerad: 12 feb 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 14551
Postad: 12 feb 15:14 Redigerad: 12 feb 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