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!
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
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.
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
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;
}