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

Permalänk

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
Permalänk
Medlem

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.

Visa signatur

Kom-pa-TI-bilitet

Permalänk

@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.

Permalänk
Medlem

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

Permalänk
Medlem

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).

Visa signatur

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

Permalänk
Hedersmedlem

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

Mvh
Moderator Shimonu

Permalänk

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;

}

Permalänk

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.

Permalänk

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.

Permalänk

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

Permalänk

@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.