2 svar
83 visningar
Armend är nöjd med hjälpen
Armend 303
Postad: 25 jan 2021 Redigerad: 25 jan 2021

Undantagshantering och felsökning

Hej, undrar om någon kan hjälpa mig lösa den här övningen nedan, jag ska använda mig av TryParse och inte trycatch

 

using System;

namespace Undantagshantering_och_felsökning
{
class Program
{
static void Main(string[] args)
{
// Deklaration av variabler
Random slumpat = new Random(); // skapar ett random objekt
int speltal = slumpat.Next(1, 21); // anropar Next metoden för att skapa ett slumptal mellan 1 och 20, 1-21 eftersom programmet slumpar då ett tal mellan 1 och 20
bool spela = true; // Variabel för att kontrollera om spelet ska fortsätta köras

// while satsen gör att programmet går i en loop tills användaren har gissat rätt
while (spela) // Tog bort ett onödigt utropstecken från (spela)
{

Console.Write("\n\tGissa på ett tal mellan 1 och 20: ");
Int32.TryParse(Console.ReadLine(), out int tal); // Jag skrev in denna kod för att undvika programkrasch vid felaktig inmatning


if (tal < speltal)
{
Console.WriteLine("\tDet inmatade talet " + tal + " är för litet eller ogiltigt, försök igen.");
}

// Lade till ELSE IF istället för felaktigt IF
else if (tal > speltal)
{
// Lade till ett bortglömt plus-tecken mellan "tal" och "är för stort"
Console.WriteLine("\tDet inmatade talet " + tal + " är för stort, försök igen.");
}

// Bytt ut IF med ELSE 
// Tog bort onödig tilldelningsoperator
else
{
Console.WriteLine("\tGrattis, du gissade rätt!");
spela = false; // Om den här koden är utanför den sista } klammerparentesen så fortsätter programmet i all evighet
}

}
}
}
}

Jag har kollat genom hela programmet, exekverat ett antal ggr för att se om något är fel osv för felsökning, till sist blev det okej.

Men när jag skriver bokstäver så vill jag att programmet skriver ut "Felaktig inmatning, ange endast nummer!" har testat att skriva else if på den vid den sista else och i den så skrev jag Console.WriteLine("Felaktig inmatning, ange endast nummer!"); men det funkar inte eftersom int32.TryParse returnar värdet 0 och eftersom tal < speltal så skrivs den första if satsen ut

Det är nog något enkelt som jag missar, kan ni ge mig någon ledtråd?

Armend 303
Postad: 25 jan 2021

bool lyckad = Int32.TryParse(Console.ReadLine(), out int tal); 

if (!lyckad)
{
Console.WriteLine("\nFelaktig inmatning, ange endast nummer!");
}

 

Nu funkar det efter jag skrev in koden över, äntligen!

Lindehaven 687 – Lärare
Postad: 25 jan 2021

Den här koden går inte igenom kompilatorn eftersom man inte kan deklarera variabeln vid metodanropet.

                Int32.TryParse(Console.ReadLine(), int out tal))

Deklarera variabeln innan anropet:

                int tal = 0;
                Int32.TryParse(Console.ReadLine(), out tal);

Ett förslag är att sedan kolla, med en if-sats, om TryParse() lyckades konvertera strängen.

Tips: Använd knappen "Infoga programmeringskod" så blir koden lättare att läsa.

Svara Avbryt
Close