4 svar
307 visningar
Mhayia behöver inte mer hjälp
Mhayia 6
Postad: 26 apr 2022 16:02

TryParse talen 0-10

Jag ska utföra en uppgift med switch som verktyg. Som ni kan se i uppgiften behöver jag testa om inmatningen är ett riktigt tal, och ge ut ett felmeddelande om användaren skriver något annat. Allting fungerar jätte bra, förutom att när jag skriver något annat än ett tal, så får jag även upp utskriften "noll" från case 0. 

Bild på min kod, konsol och uppgift --> https://gyazo.com/12cbc3d6c14f94e865ce042de81e4134

Jag har försökt googla runt för att se vad jag kan göra åt det, men utan någon större förståelse. Jag är ny i programmering 1 och därav inte så fördjupad kunskap ännu.

 

Tack på förhand!

Mhayia 6
Postad: 26 apr 2022 16:48

Jag har löst problemet med hjälp av att lägga allt i en if-sats. Men går det att undvika?


https://gyazo.com/a03259faeb37f233410cc920dd921181

datav 34
Postad: 27 apr 2022 23:56
Mhayia skrev:

Jag har löst problemet med hjälp av att lägga allt i en if-sats. Men går det att undvika?


https://gyazo.com/a03259faeb37f233410cc920dd921181

Din int.TryParse returnerar sant ifall det är en siffra och falskt ifall det är något annat än en siffra.

if(inmatning) 
    Console.WriteLine("Det är ett tal)
else
   Console.WriteLine("Det är inte ett tal")

Detta är allt du behöver egentligen. Vet inte vad switchen fyller för funktion i detta fall.

Du kan även skriva 
switch(inmatning)
case true: Console.WriteLine("Det är en siffra")
default: "Console.WriteLine("Det är inte en siffra")

Ganska ovettig switch dock för ett boolskt värde.

macson 320 – Admin
Postad: 3 maj 2022 00:30

Som datav skriver så kan du använda int.TryParse, du kan även låta den initiera variabeln:

if(!int.TryParse(Console.ReadLine(), out int siffra)){
  Console.WriteLine("Inte en siffra");
}
else
{
  // Din Switch
  Console.WriteLine(siffra);
}

..

Du kan också behålla din nuvarande kod och ta bort else genom att först testa efter det som är fel. Man brukar kalla det för "fail fast", det brukar tendera till att minska inventeringen (antalet tabbar och nestlade if-satser) vilket gör koden mer läsbar.

var inmatning = int.TryParse(Console.ReadLine(), out int siffra);
if(!inmatning){
   Console.WriteLine("Inte en siffra");
   return;
}
		
// din switch
escapevg 2
Postad: 14 maj 2022 22:42

c#10

int siffra = GetIntFromConsole();
Console.Out.WriteLine(siffra switch
{
    0 => "noll",
    1 => "ett",
    2 => "två",
    3 => "tre",
    4 => "fyra",
    5 => "fem",
    6 => "sex",
    7 => "sju",
    8 => "åtta",
    9 => "nio",
    10 => "tio",
    _ => "Siffan är inte mellan 0-10."
});

static int GetIntFromConsole()
{
    int value;
    string input = Console.ReadLine();
    while (!int.TryParse(input, out value))
    {
        Console.Out.WriteLine("Not a valid integer input, only numeric characters allowed: 0-9, please try again");
        input = Console.ReadLine();
    }

    return value;
}
Svara
Close