Permalänk
Medlem

TryCatch problem (Nybörjare)

Tjena! Min första post här.

Jag studerar just nu Programmering 1 i C# på Komvux och skulle behöva lite hjälp.

Jag är klar och nöjd med koden so far i en ganska enkel uppgift om vektorer. Problemet jag har är att jag inte får min TryCatch att fungera som jag vill. Det här är 2:a gången jag använder mig utav det så inte riktigt inläst på hur jag ska lösa detta.

När användaren matar in något annat än ett heltal så möts man av mitt felmeddelande MEN problemet är att inmatningen lagras som 0 i min vektor och det vill jag ju inte. Jag vill att när man inte matar in ett heltal så ska loopen pausas till man gör det igen och användare tillåts fortsätta skriva in nummer.

Här är min kod:

static void Main(string[] args) { Console.WriteLine("Hej! Nu ska du få skriva in 10 st heltal!"); //berättar för användaren vad som ska göras int[] vektor = new int[10]; //sätter upp en vektor för att lagra talen for (int i = 0; i < vektor.Length; i++) //här har vi en for loop som låter oss lagra tal så länge det finns lediga platser { try { vektor[i] = int.Parse(Console.ReadLine()); continue; //HÄR är problemet. min loop fortsätter men skriver man in nåt annat än heltal här så lagras det som 0 i min vektor } catch { Console.WriteLine("Du skrev inte in ett heltal... Försök igen!"); } } int nummer = 1; //deklarerar nummer så vi kan hålla reda på vilket nummer vi skriver ut foreach (int temp in vektor) //foreach loop för att skriva ut alla talen användaren matat in { if (nummer < 3) //enbart för att snygga till texte { Console.WriteLine("Det {0}:a talet du skrev in var: ", nummer); Console.WriteLine("{0}", temp); nummer++; } else //snygga till texten { Console.WriteLine("Det {0}:e talet du skrev in var: ", nummer); Console.WriteLine("{0}", temp); nummer++; } } Console.WriteLine("Tryck på valfri knapp för att avsluta . . ."); Console.ReadKey(); //programavslut }

All hjälp uppskattas! Tack på förhand.

Permalänk
Medlem

Ta bort continue, det är helt onödigt eftersom loopen per definition kommer att fortsätta även utan det.

Testa sedan att separera parse av input från tilldelning till vektorn. D.v.s. läs in användarens inmatning till en variabel och använd sedan den för att stoppa in i vektorn.

Fundera också över vad som händer om en sträng matas in istället för ett heltal. Vart i vektorn kommer nästa korrekta inmatning hamna? Kommer du att fylla hela vektorn med heltal?

Visa signatur

AMD Ryzen 7 1700X 3.8 GHz 20MB | ASUS PRIME X370-PRO | MSI GeForce GTX 1080 Gaming X 8GB | G.Skill 16GB DDR4 3200 MHz CL14 Flare X | Corsair RM650x 650W

Permalänk
Medlem

Ett enkelt sätt är att ha en oändlig loop vid varje iteration så att din huvudloop aldrig kan gå vidare utan giltig input.

for (int i = 0; i < vektor.Length; i++) //här har vi en for loop som låter oss lagra tal så länge det finns lediga platser { int parsed; while (!int.TryParse(Console.ReadLine(), out parsed) Console.WriteLine("Felaktig input. Endast heltal!"); vektor[i] = parsed; }

Visa signatur

AW3423DW QD-OLED - Ryzen 5800x - MSI Gaming Trio X 3090 - 64GB 3600@cl16 - Samsung 980 Pro 2TB/WD Black SN850 2TB

Permalänk
Medlem
Skrivet av noMad17:

Ta bort continue, det är helt onödigt eftersom loopen per definition kommer att fortsätta även utan det.

Testa sedan att separera parse av input från tilldelning till vektorn. D.v.s. läs in användarens inmatning till en variabel och använd sedan den för att stoppa in i vektorn.

Fundera också över vad som händer om en sträng matas in istället för ett heltal. Vart i vektorn kommer nästa korrekta inmatning hamna? Kommer du att fylla hela vektorn med heltal?

Tack. Jo märkte det efter jag lekte runt lite.

Försökte det och fick inte riktigt till det så det funkade. Lyckades självfallet att få till omvandlingen av sträng till int men inte resten.
Det som blev problemet. Så fort en sträng kom in lades den in i vektorn och lagrades som en nolla. Tack för hjälpen!

Permalänk
Medlem
Skrivet av celoz:

Ett enkelt sätt är att ha en oändlig loop vid varje iteration så att din huvudloop aldrig kan gå vidare utan giltig input.

for (int i = 0; i < vektor.Length; i++) //här har vi en for loop som låter oss lagra tal så länge det finns lediga platser { int parsed; while (!int.TryParse(Console.ReadLine(), out parsed) Console.WriteLine("Felaktig input. Endast heltal!"); vektor[i] = parsed; }

Tack som tusan för tipset! Suttit och försökt med if-loopar och try-catch utan vidare resultat. Detta gjorde dock susen. Googlade runt lite på mitt problem och möttes av liknande svar men kunde inte omvandla om det in i min kod. Stort tack för tipset!