6 svar
51 visningar
CsharpStudent är nöjd med hjälpen
CsharpStudent 5
Postad: 13 nov 13:49 Redigerad: 13 nov 13:54

Undantags och felhantering


Hej, finns det någon som kan hjälpa mig. Jag förstår inte varför int tal = 0; inte fungerar mot TryParse. Det kommer endast ut 0.


 class Program
    {
        static void Main(string[] args)
        {
            //Deklarerar en int av värde 0 för att vi inte vet vad användare matar in.
            int tal = 0;
          
            // Deklaration av variabler
            Random slumpat = new Random(); // skapar ett random objekt

            int speltal = slumpat.Next(); // anropar Next metoden för att skapa ett slumptal mellan 1 och 20
                                          // läs på, vad är overload metoder? https://msdn.microsoft.com/en-us/library/system.random.next(v=vs.110).aspx

            bool spela = true; // Variabel för att kontrollera om spelet ska fortsätta köras


            // while loopen gör att programmet fortsätter till användaren gissat rätt.
            // Tog bort utropstecken från (spela)
            while (spela)
            {

                Console.Write("\n\tGissa på ett tal mellan 1 och 20: ");
                Int32.TryParse(Console.ReadLine(), out tal); // TryParse för att undvika krash om användare matar in annat än tal

            
    if (tal < speltal)
                {
                    //Saknades ett + som adderar för att binda samman utskrifterna med det tal användare matat in.
                    Console.WriteLine("\tDet inmatade talet " + tal + " är för stort, försök igen.");
                }

                // Skapade en else if istället för if (om tal är större än speltal kommer texten nedan matas ut)
                else if (tal > speltal)
                {
                    
                    Console.WriteLine("\tDet inmatade talet " + tal + " är för stort, försök igen.");
                }

                // Bytte ut If mot en else och tog bort tilldelningsoperatorn
                else
                {
                    Console.WriteLine("\tGrattis, du gissade rätt!");
                    spela = false;
                }

            }
        }
    }
}
Laguna Online 16914
Postad: 13 nov 14:10

Jag vet inte, men kolla returvärdet från TryParse. Det kanske inte gick att läsa det du matade in som ett tal.

Prova tal = Parse(Console.ReadLine()) i stället, så ser du om det blir ett felmeddelande.

CsharpStudent 5
Postad: 13 nov 14:41

Får inte det att fungera heller tyvärr. Tack ändå

beerger 937
Postad: 13 nov 15:32

Börja med att lägg till det här, annars slumpar du tal som är enorma.

int speltal = slumpat.Next(1, 20);
beerger 937
Postad: 13 nov 15:34

TryParse fungerar så att det returnerar true om du lyckas parsa, och då hamnar värdet i variabeln tal.

Om parsern inte lyckas så sätts variabeln tal till 0 oavsett vad som skrevs in, men man vet då genom vad TryParse returnerar att parsern inte lyckats, och att talet i variabeln tal skall ignoreras.

beerger 937
Postad: 13 nov 15:38

Detta är ett sätt att lösa det på:

            do
            {
                Console.Write("\n\tGissa på ett tal mellan 1 och 20: ");
            }
            while (!Int32.TryParse(Console.ReadLine(), out tal));

En do-while loop för du vill att köra den minst en gång. Du ber användaren gissa ett tal, sedan kollar du om parsning lyckas. Om inte, då ställer du frågan igen.

CsharpStudent 5
Postad: 17 nov 00:11

Tack för all hjälp, jag har fått rätt på det nu :)

Svara Avbryt
Close