Undantagshantering och felsökning i C#. Hjälp!

Trädvy Permalänk
Medlem
Registrerad
Jul 2016

Undantagshantering och felsökning i C#. Hjälp!

Tjenare jag studerar C# på distans vilket gör många uppgifter svårare att förstå och lösa, tänkte be om hjälp att både förstå varför och hur jag kan rätta till den här uppgiften.
Är väldigt ny till detta och har ingen tidigare erfarenhet utanför kursen.

Jag har gjort så gott jag kan och rättat till felen jag hittar och förstår, har lagt kommentarer vid varje rad jag har försökt fixa för att få programmet att fungera.
Av någon anledning så stänger programmet av sig efter första "if" satsen och jag hittar ingen lösning till detta. Tacksam för all hjälp jag kan få!

Programmet ser ni nedan.

static void Main(string[] args) { // Deklaration av variabler Random slumpat = new Random(); // skapar ett random objekt int speltal = slumpat.Next(1, 20); // anropar Next metoden för att skapa ett slumptal mellan 1 och 20 // Gräns mellan minsta och största värde saknades bool spela = true; // Variabel för att kontrollera om spelet ska fortsätta köras while (spela) //har tagit bort ! från (spela) { int tal; Console.WriteLine("\n\tGissa på ett tal mellan 1 och 20: "); //int tal = Convert.ToInt32(Console.ReadLine()); Int32.TryParse(Console.ReadLine(), out tal); //försökte med TryParse för att undvika Format Exceptions. if (tal < speltal) { Console.WriteLine("\tDet inmatade talet " + tal + " är för litet, försök igen."); Console.ReadKey(); } if (tal > speltal) { Console.WriteLine("\tDet inmatade talet " + tal + " är för stort, försök igen."); // + tecken saknades Console.ReadKey(); } if (tal == speltal) // = tecken saknades Console.WriteLine("\tGrattis, du gissade rätt!"); //Program avslutas drastiskt Console.ReadKey(); spela = false;

La till code-taggar
Trädvy Permalänk
Medlem
Plats
i din garderob
Registrerad
Sep 2007

Du sätter alltid spela till false i raden längst ner. Om du tittar på de andra if-satserna du skrivit så använder du { … } för att innesluta det block som ska vara knutet till villkoret. Din sista if-sats saknar detta block.

Bilanaloger är som Volvo — varenda svenne kör med dem

Trädvy Permalänk
Medlem
Registrerad
Jul 2016

@Teknocide: Tackar, det var en miss av mig efter att ha försökt hitta andra fel.

mitt problem återstår då programmet stänger av sig direkt efter det givit ett svar från en av if satserna.

Exempel

Gissa på ett tal mellan 1 och 20:
Jag skriver in 7
Sedan får jag svar på om talet är för litet eller för stort, efter detta så avaktar programmet tills jag börjar skriva in något annat t.ex om jag börjar skriva in ett nytt tal så stänger programmet av sig och kräver en ny start för att kunna gissa igen.

Trädvy Permalänk
Medlem
Plats
127.0.0.1
Registrerad
Sep 2003

Vad får du för returvärde av TryParse?
Edit: lite sent, har nu läst resterande poster...

1: Intel i7-3930K | 32GB Corsair Dominator GT | Asus Rampage IV Extreme x79 | 2 x 1080 GameRock Premium 8GB | 2 x Samsung Pro 840 512GB | Corsair AX1200i | BenQ XL2411 24" / W1070 135" | Bose QC25 | Windows 10 Pro x64 | HTC Vive |
2: Intel Core i7-4700HQ | 32GB RAM | Intel HM87 Express | GTX 780M | 17" | Windows 10 x64 |

Trädvy Permalänk
Medlem
Plats
Götet
Registrerad
Okt 2013

Som @Teknocide sa, din sista IF-sats gäller endast en rad eftersom du saknar { }. Samt att While-satsen inte har en slut-}. copy/paste misstag bara eller fel i koden?

En liten bonus: slumpat.Next(1, 20) kommer returnera 1-19, aldrig 20. Så random.next är definierat. Så om du vill ha 1-20 så får du göra next(1, 21).

Processor: Motorola 68000 | Klockfrekvens: 7,09 Mhz (PAL) | Minne: 256 kB ROM / 512 kB RAM | Bussbredd: 24 bit | Joystick: Tac2 | Operativsystem: Amiga OS 1.3

Trädvy Permalänk
Moderator
Plats
Linköping
Registrerad
Okt 2006

Jag har redigerat första inlägget med code-taggar för att göra det mer läsvänligt.

Mvh
Moderator Shimonu

Har du åsikter om moderering, frågor eller något annat kan du kontakta mig via shimonu@sweclockers.com

Trädvy Permalänk
Medlem
Registrerad
Jul 2016

Glömde lägga till i början av inlägget att jag är väldigt ny till C# och programmering overall.

@talonmas: tack för infon om 1-21 biten.

Jag testade att lägga till { ... } till sista if - satsen och samma problem ligger kvar.

if (tal == speltal) // = tecken saknades
{
Console.WriteLine("\tGrattis, du gissade rätt!"); //Program avslutas utan att berätta svaret
Console.ReadKey();
}
spela = false;

}

Trädvy Permalänk
Medlem
Registrerad
Jul 2016

Spelade in en kort video med körtid av programmet, det kanske underlättar att förstå vad problemet kan vara.

http://screencast-o-matic.com/watch/cDif6giUWe

Jag antar att programmet inte ska avslutas på det här viset utan att ge ett svar ? annars är det jag som har gjort ett misstag och inte förstått uppgiften korrekt.

Krav på uppgift:

Innan du kan köra programmet så kommer du att behöva felsöka koden, till din hjälp har du debug verktygen i din utveckarmiljö. Dokumentera de fel du hittar och förklara varför de uppstår. Det finns både syntax fel och logiska fel i programmet. När du kan köra programmet så sätt dig in i dess funktion, använd dig av pseudokod och flödesschema för att förstå logiken!
Din uppgift blir sedan att se till att programmet kan köras utan körtidsfel. För detta ska du använda dig av TryParse och eller Try Catch. Undersöka möjligheten att använda båda dessa metoder för att hantera felaktig inmatning.

Trädvy Permalänk
Medlem
Registrerad
Mar 2013

Du måste ha "spela=false" i "if (tal=..." blocket (dvs innanför klamrarna) annars kommer "while (spela)" att avslutas då du sätter spela till falsk det sista du gör i "while" blocket.

Trädvy Permalänk
Medlem
Registrerad
Mar 2013

if (tal == speltal) // = tecken saknades
{
Console.WriteLine("\tGrattis, du gissade rätt!"); //Program avslutas utan att berätta svaret
Console.ReadKey();
spela = false;
}

Trädvy Permalänk
Medlem
Registrerad
Jul 2016

@ByteBitten: Tack så mycket!
Det här verkar ha avklarat uppgiften, programmet stänger inte av sig själv längre och loopar som det ska.

Tack än en gång för hjälpen.