Programmering 1 Amerikanen i bastun

Permalänk

Programmering 1 Amerikanen i bastun

namespace ConsoleApp2_amerikanen { class Program { static double fahrenheittoCelsius(double fahr) { double celsius = ((fahr - 32) * 5) / 9; return celsius; } static void Main(string[] args) { double celsius, temp, fahr; Console.WriteLine("Välkommen in i bastun"); do { Console.WriteLine("\nPlease enter temperature"); try { fahr = Convert.ToDouble(Console.ReadLine()); celsius = fahrenheittoCelsius(fahr); temp = Math.Round(celsius, 1); // deklarerad här } catch (Exception e) { Console.WriteLine("Du kan endast använda siffror!"); } if (temp < 73) // får felmeddelande just för denna del i if satsen, "use of unassigned local variable temp" { Console.Write("\nThe temperatur is now {0} celsius it's a bit cold, please turn up the heat", temp); } else if (temp > 77) // här funkar det { Console.WriteLine("\nThe temperatur is now {0} celsius it's a bit to hot, please lower the heat", temp); } else if (temp == 75) // här funkar det { Console.WriteLine("\nThe temperature is now {0} celsius it's perfect, lets sauna!", temp); } else if (temp > 73 && temp < 77) // här funkar det { Console.WriteLine("\nThe temperature is now {0} celsius and that's is fine, lets sauna", temp); } } while (temp <= 73 || temp >= 77); // här funkar det Console.ReadKey(); } } }

Permalänk

Någon som kan hjälpa?

Jag läser programmering 1 och är fast på en del i uppdrag 2 "amerikanen i bastun". Som det går att se i koden får jag upp vid det första villkoret i min if sats att variabeln temp inte känns igen. Det verkar funka i efterföljande villkor. Vill få med en try catch för att fånga upp fel ifall annat än numeriska värden skrivs in.

Sätter jag in deklarationen av dom variabler som ligger i try blocket innan DO så funkar det men jag vill ju testa inmatningen från användaren om det skulle bli fel. Ska jag sätta in hela DO delen innanför TRY?

Permalänk
Medlem

Deklarera och tilldela temp till nåt. Typ 0.0. Just nu testar du temp utan att det är säkert att den fått ett värde.

Visa signatur

DAN Cases A4-SFX | AMD Ryzen 7 9800X3D | Thermalright AXP90-X47 Full Copper |
INNO3D GeForce RTX 4070 Ti SUPER 16GB Twin X2 | Kingston 32GB (2x16GB) DDR5 6000MHz CL30 | ASUS ROG Strix B650E-I Gaming WIFI | Samsung 960 EVO 1TB | Corsair SF-600

Permalänk
Medlem
Skrivet av jonasromin:

Jag läser programmering 1 och är fast på en del i uppdrag 2 "amerikanen i bastun". Som det går att se i koden får jag upp vid det första villkoret i min if sats att variabeln temp inte känns igen. Det verkar funka i efterföljande villkor. Vill få med en try catch för att fånga upp fel ifall annat än numeriska värden skrivs in.

Sätter jag in deklarationen av dom variabler som ligger i try blocket innan DO så funkar det men jag vill ju testa inmatningen från användaren om det skulle bli fel. Ska jag sätta in hela DO delen innanför TRY?

Det är för att dina variabler inte instansieras med något värde. Sätter du något default värde så kommer det att fungera.
Om assignen i try blocket failar så kommer temp vara unassigned. Compilern är smart nog att förstå att detta kommer att bli galet och tillåter inte dig att kompilera koden. För du kan inte jämföra om unassigned är mindre än 73.

Edit:
Nioreh83 var snabbare

Permalänk
Medlem

Sen bör try/Catch inte "missbrukas" till att användas funktionellt som du gör nu. Finns andra beprövade sätt att validera siffror på. Lämna try/catch till det som ska fångas istället. Lika bra att få rätt beteende från början

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
Medlem

För övrigt ska Try Catch undvikas, och i ditt fall rekommenderas istället TryParse.

Visa signatur

AMD Ryzen 7 5800X3D | EVGA GeForce RTX 3080 10GB FTW3 ULTRA | ASUS ROG Strix B450-F Gaming | Corsair RM750X V2 | Crucial Ballistix Sport LT 3200MHz 16GB | Samsung 980 Pro 1TB | Crucial MX500 2TB | NZXT H500

Permalänk

Tackar! :)

Tackar så mycket, nu funka det klockers. Deklarerade temp = 0; och sen temp = temp + Math.Round(celsius,1) eftersom att jag vill ha in det tal som avrundas från variabeln celsius.

Tackar för hjälpen 😁

Permalänk
Medlem
Skrivet av jonasromin:

Tackar så mycket, nu funka det klockers. Deklarerade temp = 0; och sen temp = temp + Math.Round(celsius,1) eftersom att jag vill ha in det tal som avrundas från variabeln celsius.

Tackar för hjälpen 😁

Du behöver inte plussa på talet, du kan skriva över det helt med en vanlig assign. Du behövet bara första värdet för att kompilera koden. Plussar du på så kommer det bara öka för varje iteration i loopen.