Permalänk
Medlem

@perost

Du är en räddare i nöden, allt verkar att fungera nu med din hjälp.
Tusen tack

Permalänk

Try och Catch.

Hej!
Är på samma uppgift och försöker själv få "try" and "catch" att fungera.
detta är min kod just nu:

}{ class Program { public static int FahrToCels(int fahrenheit) { int celsius = (fahrenheit - 32) * 5 / 9; return celsius; } public static void Main(string[] args) { int celsius; do { Console.WriteLine("Skriv in Fahrenheit :"); int fahrenheit = int.Parse(Console.ReadLine()); celsius = FahrToCels(fahrenheit); if (celsius < 73) { Console.WriteLine(fahrenheit + "farenheit = " + celsius + " celsius"); Console.WriteLine("Värde för lågt. Skriv in en högre temperatur:"); } else if (celsius > 77) { Console.WriteLine(fahrenheit + " farenheit = " + celsius + " celsius"); Console.WriteLine("Värde för högt. Skriv in en lägre temperatur."); } else if (celsius == 75) { Console.WriteLine(fahrenheit + " farenheit = " + celsius + "celsius"); Console.WriteLine("Tempraturen är nu:" + celsius + " grader. Det är perfekt!"); break; } else { Console.WriteLine("Temperaturen är nu: " + celsius+" grader. Det är bra, men inte helt perfekt!"); break; } } while (celsius > 73 || celsius < 77); Console.Write("Press any key to continue... "); Console.ReadKey(true); } } }

Dold text

Det jag försökt med är att skriva in mitt "Try" och "catch" runt:

do { Console.WriteLine("Enter Farenheit: "); int fahrenheit = int.Parse(Console.ReadLine()); celsius = FahrToCels(fahrenheit);

På detta viset:

try { Console.WriteLine("Enter Farenheit: "); int fahrenheit = int.Parse(Console.ReadLine()); celsius = FahrToCels(fahrenheit); } catch { Console.WriteLine("You have to write a number for the converter to work, try again."); }

men det fungerar inte.Har även försökt skriva det runt bara console, int farenheit och celsius utan resultat. Någon som har lust att leda mig in på rätt spår?
Tack på förhand.

Permalänk
Medlem

@ivanoverdrivarn1995: Kan du vara lite mer specifik med vad det är som inte fungerar med din kod?

Men ett problem jag kan se är att du inte gör någon mer än skriver ut ett meddelande i catch-satsen, du hanterar inte felet på något sätt. D.v.s. koden som kommer efter try-catch i loopen kommer fortfarande köras, men med det föregående värdet på celsius eftersom int.Parse kommer kasta ett exception innan celsius tilldelas ett nytt värde. För att lösa det kan du t.ex. använda continue, se mitt inlägg längst ner på första sidan i tråden.

Permalänk
Skrivet av perost:

@ivanoverdrivarn1995: Kan du vara lite mer specifik med vad det är som inte fungerar med din kod?

Men ett problem jag kan se är att du inte gör någon mer än skriver ut ett meddelande i catch-satsen, du hanterar inte felet på något sätt. D.v.s. koden som kommer efter try-catch i loopen kommer fortfarande köras, men med det föregående värdet på celsius eftersom int.Parse kommer kasta ett exception innan celsius tilldelas ett nytt värde. För att lösa det kan du t.ex. använda continue, se mitt inlägg längst ner på första sidan i tråden.

Det som inte fungerar är själva try och catch-satsen, i övrigt fungerar koden.
Det jag är mest förvirrad över är vart jag ska skriva satsen exakt samt vilken kod som ska skrivas in i catch. Jag försöker läsa i tråden och tolka det som står och har då kommit fram till koden:

do //början på loopen Console.WriteLine("Skriv in Fahrenheit :"); //Ber amerikanen skriva in grader i farenheit { try { int fahrenheit = int.Parse(Console.ReadLine()); } catch{ Console.WriteLine("Du måste skriva in en siffra för att programmet ska funger. Prova igen."); continue; } celsius = FahrToCels(fahrenheit); // graden som amerikanen skrivit in omvandlas till celsus

Detta ger en väldans massa errors...

Om jag istället skriver

do //början på loopen { try { Console.WriteLine("Skriv in Fahrenheit :"); //Ber amerikanen skriva in grader i farenheit int fahrenheit = int.Parse(Console.ReadLine()); celsius = FahrToCels(fahrenheit); // graden som amerikanen skrivit in omvandlas till celsus } catch{ Console.WriteLine("Du måste skriva in en siffra för att programmet ska funger. Prova igen."); continue; }

hittar den inte namnet farenheit i den aktuella kontexten...

Tack för ditt svar!

Permalänk
Medlem

@ivanoverdrivarn1995: Du måste deklarera fahrenheit utanför try-catch-satsen, livslängden på en variabel är i regel endast blocket ({ }) den är deklarerad i. D.v.s.:

{ int i = 1; { i = 2; // Ok, `i` är deklarerad i ett omgivande block. } } i = 3; // Fel, ingen variabel `i` deklarerad i detta block.

Permalänk

surprise, surprise! Här är en annan nybörjare som har fastnat med Amerikanaren i bastun och jag har stirrat mig blind på uppgiften och håller på att bli galen. Har frågat om hjälp till min lärare men hans tips var att göra ett flödesschema, vilket jag gjort men det har inte hjälpt mig. Precis som tidigare inlägg så vill jag inte bli dum- eller idiotförklarad, första gången jag kodar och tycker inte att det är det lättaste och inte blir det bättre när kursmaterialet är under all kritik och man ska "söka på internet" för att få svar.

namespace amerikanaren_bastun { class Program { static int FahrenheitToCelsius(int fahr) { int celsius = ((fahr - 32) * 5) / 9; //räknar FRÅN fahrenheit TILL celsius return celsius; // returnerar i celsius } static void Main(string[] args) { Console.WriteLine("Ange en önskad temperatur i Fahrenheit för bastun"); //amerikanaren skriver in fahrenheit int fahrenheit = int.Parse(Console.ReadLine()); // omvandlar sträng till tal int celsius = FahrenheitToCelsius(fahrenheit); do { if (celsius < 73) //mindre än { Console.WriteLine("Det är " + celsius + " grader celsius och för kallt för att basta. Ange en ny, högre temperatur:"); Console.ReadLine(); } else if (celsius > 77) { Console.WriteLine("Det är " + celsius + " grader celsius och det är för varmt för att basta. Ange en ny, lägre temperatur!"); Console.ReadLine(); } else if (celsius == 75) { Console.WriteLine(celsius + " grader celsius är perfekt temperatur för att basta!"); Console.ReadLine(); } else { Console.WriteLine("Ok att basta"); Console.ReadLine(); } } while (celsius <= 73 || celsius >= 77); // fortsätter loopen om graderna är mindre eller lika med 73, mer eller lika med 77 Console.WriteLine("Slut"); // programmet avslutas när perfekt temperatur är angiven Console.ReadKey(); } } }

Så nu till frågorna/problemen:

1. Eftersom att han är en amerikanare och ska skriva in fahrenheit så kan han skriva in 172.4, vilket mitt program inte kommer klara av pga int. Antar att jag behöver byta int till... double?
2. Anger jag tex. 158 farenheit så skriver programmet ut att det är för kallt och att jag ska ange en ny temperatur och då anger jag 167 (vilket är 75 celsius=perfekt) då säger programmet fortfarande att det är för kallt.
3. Borde inte "ange önskad temperatur" vara inne i "do"?

Permalänk
Medlem
Skrivet av kongoveckan:

1. Eftersom att han är en amerikanare och ska skriva in fahrenheit så kan han skriva in 172.4, vilket mitt program inte kommer klara av pga int. Antar att jag behöver byta int till... double?
2. Anger jag tex. 158 farenheit så skriver programmet ut att det är för kallt och att jag ska ange en ny temperatur och då anger jag 167 (vilket är 75 celsius=perfekt) då säger programmet fortfarande att det är för kallt.
3. Borde inte "ange önskad temperatur" vara inne i "do"?

1. Amerikanaren får lära sig att bara skriva in heltal, eller så får du kontrollera indata så att det är korrekt vilket gör allting mycket krångligare. (Han kan skriva in vilka tecken som helst, inte bara tal.)
2. Du uppdaterar aldrig variabeln celsius efter att den fått ett värde första gången.
3. Korrekt. Inläsningen av nytt värde och tilldelning till fahrenheit och celsius skall också ligga inne i do-loopen. Existerande anrop till ReadLine() inne i loopen bör tas bort.

Permalänk
Medlem
Skrivet av kongoveckan:

1. Eftersom att han är en amerikanare och ska skriva in fahrenheit så kan han skriva in 172.4, vilket mitt program inte kommer klara av pga int. Antar att jag behöver byta int till... double?

Jag tror det är underförstått i uppgiften att man bara ska kunna mata in heltal och att konverteringen av temperaturen också avrundas till närmaste heltal.

Skrivet av kongoveckan:

2. Anger jag tex. 158 farenheit så skriver programmet ut att det är för kallt och att jag ska ange en ny temperatur och då anger jag 167 (vilket är 75 celsius=perfekt) då säger programmet fortfarande att det är för kallt.

Du läser aldrig in något nytt värde, så samma värde kommer användas om och om igen.

Skrivet av kongoveckan:

3. Borde inte "ange önskad temperatur" vara inne i "do"?

Precis, utskriften och inläsningen borde ligga inne i loopen. Gör bara inte det vanliga misstaget att ha inläsning både före och efter loopen, det är onödigt och krånglar bara till koden.

Permalänk
Skrivet av Erik_T:

1. Amerikanaren får lära sig att bara skriva in heltal, eller så får du kontrollera indata så att det är korrekt vilket gör allting mycket krångligare. (Han kan skriva in vilka tecken som helst, inte bara tal.)
2. Du uppdaterar aldrig variabeln celsius efter att den fått ett värde första gången.
3. Korrekt. Inläsningen av nytt värde och tilldelning till fahrenheit och celsius skall också ligga inne i do-loopen. Existerande anrop till ReadLine() inne i loopen bör tas bort.

Skrivet av perost:

Jag tror det är underförstått i uppgiften att man bara ska kunna mata in heltal och att konverteringen av temperaturen också avrundas till närmaste heltal.
Du läser aldrig in något nytt värde, så samma värde kommer användas om och om igen.
Precis, utskriften och inläsningen borde ligga inne i loopen. Gör bara inte det vanliga misstaget att ha inläsning både före och efter loopen, det är onödigt och krånglar bara till koden.

Tack för era svar! Tyvärr så är jag fortfarande fast i uppgiften och har fler frågor och problem:
1. Tanken är såklart att en try-catch ska in i koden också så att han inte kan skriva in bokstäver och try vill jag ha vid int.Parse och därefter catch med en text som säger att han bara får skriva heltal, men får givetvis error på det också...
2. För att celsius ska få ett nytt värde måste väl amerikanaren skriva in ett nytt värde med readline, eller? va? Hjälp... varför är jag trög?
3. När jag flyttar inläsningen och utskriften av önskad temperatur in i DO får jag 2 errors: The name 'celsius' does not exist in the current context. Vad i hela friden? Måste deklarera celsius innan DO också, eller?
4. Fasiken... det var något mer men glömde av det

namespace Bastun1 { class Program { public static int FahrenheitToCelsius(int fahrenheit) { int celsius = (fahrenheit - 32) * 5 / 9; return celsius; } static void Main(string[] args) { Console.WriteLine("Hello Sauna!"); Console.WriteLine("Ange en temperatur:"); do { här vill jag ha en try int fahrenheit = int.Parse(Console.ReadLine()); och här vill jag ha en catch som säger att han bara få ange heltal men vart fan ska int celsius ta vägen? i try? utanför try? innan do? int celsius = FahrenheitToCelsius(fahrenheit); if (celsius < 73) { Console.WriteLine(celsius + " Grader är för kallt, öka"); } else if (celsius == 75) { Console.WriteLine(celsius + " Grader är perfekt, börja basta"); } else if (celsius < 77) { Console.WriteLine(celsius + " Grader är för varmt, sänk"); } else { Console.WriteLine(celsius + " Grader är Ok, men inte optimalt"); } } while (celsius < 73 || celsius > 77); Console.WriteLine("Tryck för att avsluta"); Console.ReadKey(); } } }

Permalänk
Medlem

@kongoveckan: { } definierar ett block i C#, och alla variabler deklarerade inne i blocket existerar endast inne i blocket. T.ex:

int i = 4; { int j = i + 3; // Ok, i är deklarerad utanför och kan användas här. } j = 6; // Fel, j slutade existera vid } ovanför.

Här använder jag bara ett block som det är, vilket är ganska ovanligt i riktig kod. Men samma princip gäller när du använder block för t.ex. do-while, if, for, klassmetoder, o.s.v.

Du måste alltså som du är inne på deklarera celsius utanför loopen för att kunna använda den i loop-villkoret, eftersom villkoret ligger utanför blocket som do-while-loopen upprepar. Du behöver dock inte ge variabeln något värde när den deklareras eftersom den får ett värde i början av loopen.

Permalänk
Skrivet av perost:

@kongoveckan: { } definierar ett block i C#, och alla variabler deklarerade inne i blocket existerar endast inne i blocket. T.ex:

int i = 4; { int j = i + 3; // Ok, i är deklarerad utanför och kan användas här. } j = 6; // Fel, j slutade existera vid } ovanför.

Här använder jag bara ett block som det är, vilket är ganska ovanligt i riktig kod. Men samma princip gäller när du använder block för t.ex. do-while, if, for, klassmetoder, o.s.v.

Du måste alltså som du är inne på deklarera celsius utanför loopen för att kunna använda den i loop-villkoret, eftersom villkoret ligger utanför blocket som do-while-loopen upprepar. Du behöver dock inte ge variabeln något värde när den deklareras eftersom den får ett värde i början av loopen.

Tack! Du är en ängel!

Permalänk
Medlem

Hej,

Ytterligare en nybörjare som behöver hjälp med bastuuppgiften. Allt fungerar fint tills jag ska få in try and catch, se kod nedan. Har läst igenom samtliga inlägg här men trots det lyckas jag inte. Jag förstår att jag måste deklarera min cels, men vart och hur? Väldigt tacksam för hjälp!

using System; namespace _3_Bastu { class Program { public static int FahrenheitTillCelsius(int fahr) { int cels = ((fahr - 32) * 5) / 9; //metod för att beräkna Fahrenheit till Celsius return cels; //returnerar värdet } static void Main(string[] args) { int cels; Console.WriteLine("Ange önskad temperatur: "); do { try { int fahr = int.Parse(Console.ReadLine()); } catch { Console.WriteLine("Fel inmatning, ange ett heltal med siffror!"); } cels = FahrenheitTillCelsius(fahr); Console.WriteLine("Temperaturen är " + cels + " grader celsius."); if (cels < 73) { Console.WriteLine("Temperaturen är för låg, vänligen ange en högre temperatur:"); } else if (cels > 77) { Console.WriteLine("Temperaturen är för hög, vänligen ange en lägre temperatur:"); } else if (cels == 75 ) { Console.WriteLine("Temperaturen är nu optimal för att basta"); } else { Console.WriteLine("Temperaturen är nu lagom - du kan nu basta."); Console.ReadKey(); } } while (cels <= 73 || cels >= 77); Console.WriteLine("Du kan nu basta"); Console.ReadKey();

Permalänk
Medlem

@Olsv: Inget fel på cels, det är fahr som är problemet. Se mitt inlägg ovanför angående block och deras påverkan på variablers synlighet.

Permalänk
Medlem
Skrivet av perost:

@Olsv: Inget fel på cels, det är fahr som är problemet. Se mitt inlägg ovanför angående block och deras påverkan på variablers synlighet.

Tack för svar! Ursäkta min tröghet men som jag tolkar din beskrivning behöver jag bara deklarera farh (utan något värde) utanför loopen. Lägger jag till int fahr; ovanför try så fungerar det ändå inte. Ger jag fahr ett värde så tar den upp detta som en inmatning.. Vad är det jag missar?

Permalänk
Medlem
Skrivet av Olsv:

Tack för svar! Ursäkta min tröghet men som jag tolkar din beskrivning behöver jag bara deklarera farh (utan något värde) utanför loopen. Lägger jag till int fahr; ovanför try så fungerar det ändå inte. Ger jag fahr ett värde så tar den upp detta som en inmatning.. Vad är det jag missar?

fahr behöver inte deklareras utanför hela loopen, bara utanför try-catch-satsen.

Sen är jag inte riktigt med på vad du menar, men jag antar att problemet är att C# inte tillåter att man använder variabler innan de blivit tilldelade ett värde. Om användaren matar in ett felaktigt värde så kommer fahr aldrig få något värde tilldelat, men i din nuvarande try-catch-sats så skriver du då bara ut ett felmeddelande vilket innebär att resten av loopen ändå körs. För att lösa detta kan du använda continue för att direkt hoppa till början av loopen igen om användaren matar in ett felaktigt värde.

Permalänk
Medlem

Har varit fast på denna uppgift länge nu och förstår inte vad jag gör fel.
när jag skriver in typ 20 grader så skriver programmet ut att det är för kallt, men ändrar jag värdet och skriver in 200 så är det fortfarande för kallt.

[code]
using System;

namespace uppdrag2
{
class MainClass
{
public static double FahrToCels(int fahrenheit)
{
int cel = ((fahrenheit - 32) * 5) / 9;
return cel;
}

public static void Main(string[] args)
{
Console.WriteLine("Type in temperature");
int fahrenheit = int.Parse(Console.ReadLine());
double celsius = FahrToCels(fahrenheit);
do
{

if (celsius < 73)
{
Console.WriteLine("Temperature is too cold, please adjust for a more comfortable experience ");
Console.ReadLine();

}
else if (celsius > 77)
{
Console.WriteLine("Temperature is too hot please adjust for a more comfortable experience");
Console.ReadLine();
}
else if (celsius == 75)
{
Console.WriteLine("Temperature is perfect for the sauna");
Console.ReadLine();
}
} while (celsius <= 73 || celsius >= 77);

Console.WriteLine("Temperature is good enough for a pleasant sauna experience");
Console.ReadKey();

}
[code]

Permalänk
Medlem
Skrivet av wilund91:

Har varit fast på denna uppgift länge nu och förstår inte vad jag gör fel.
när jag skriver in typ 20 grader så skriver programmet ut att det är för kallt, men ändrar jag värdet och skriver in 200 så är det fortfarande för kallt.

Du läser bara in temperaturen en gång, utanför loopen, så den uppdateras aldrig efteråt

Permalänk
Medlem
Skrivet av Erik_T:

Du läser bara in temperaturen en gång, utanför loopen, så den uppdateras aldrig efteråt

Har försökt länge nu att få till det men förstår inte hur jag skall göra för att värdet skall sparas inne i loopen?

Permalänk
Medlem
Skrivet av wilund91:

Har försökt länge nu att få till det men förstår inte hur jag skall göra för att värdet skall sparas inne i loopen?

Hur gör du för att värdet ska sparas utanför loopen?

Visa signatur

Spela Swemantle! Du vet att du vill.

Ibland har jag fel, men då är det någon annans fel.

Permalänk
Medlem
Skrivet av wilund91:

Har försökt länge nu att få till det men förstår inte hur jag skall göra för att värdet skall sparas inne i loopen?

Gör själva inläsningen och tilldelningen till en variabel inne i loopen. Deklaration av variabeln behåller du utanför loopen.

Permalänk
Medlem
Skrivet av wilund91:

Har försökt länge nu att få till det men förstår inte hur jag skall göra för att värdet skall sparas inne i loopen?

Du bör ha inläsningen inne i loopen, det finns ingen anledning att läsa in något värde innan loopen börjar. Läs gärna igenom den här tråden från början, du gör samma fel som de flesta andra som gör den här uppgiften.

Permalänk
Medlem
Skrivet av perost:

Du bör ha inläsningen inne i loopen, det finns ingen anledning att läsa in något värde innan loopen börjar. Läs gärna igenom den här tråden från början, du gör samma fel som de flesta andra som gör den här uppgiften.

Fick till det, Tack så mycket.

Har varit svårt att plugga när man som ensamstående har haft ett sjukt barn hemma i över en vecka. Nu kan jag äntligen börja med sekvensdiagrammet

Permalänk
Medlem

Väntar spänt på Lord Kelvin i bastun-uppgiften

Visa signatur

🧠i9-10900k @ 3,7GHz 📹3080Ti STRIX OC 12GB 📼Corsair Vengeance 64GB
📰MSI MEG z490 Unify 💽Samsung 970 EVO plus 500GB/1TB 📺Asus PG348Q 34"

Permalänk
Medlem
Skrivet av griid:

Väntar spänt på Lord Kelvin i bastun-uppgiften

public double CelsiusToKelvin(int inTemp) {
return inTemp + 273.15;
}

public void KelvinToCelsius(int inTemp) {
JOptionPane.showMessageDialog(null, "Use Kelvin instead, you heathen.");
System.exit(0);
}

Visa signatur

i5-7600k . GTX 1080 . 16 GB

Permalänk

Är halvt fast på samma uppgift, får det mesta att funka men får bara in min try/catch när jag använder mig av While(true) men går det inte att få in den utan någon loop? Så här ser min kod ut

namespace sistaförsöket { class Program { static int Fahrtocel(int fahr) { int cel = ((fahr - 32) * 5 / 9); return cel; } static void Main(string[] args) { int cel; int fahr; do { Console.WriteLine("Welcome to the sauna, please enter the temperature in Fahrenheit."); while(true) try { fahr = int.Parse(Console.ReadLine()); break; } catch(Exception e) { Console.WriteLine(e.Message); continue; } cel = Fahrtocel(fahr); if (cel < 73) { Console.WriteLine("The temperature is too low, turn it up."); } else if (cel > 77) { Console.WriteLine("The temperature is too high, turn it down."); } else if (cel == 75) { Console.WriteLine("The temperature is perfect."); } else { Console.WriteLine("The temperature is okay."); } } while (cel <= 73 || cel >= 77); Console.WriteLine("Enjoy the sauna! =)"); Console.ReadKey();

Permalänk
Medlem
Skrivet av dotaponny:

Är halvt fast på samma uppgift, får det mesta att funka men får bara in min try/catch när jag använder mig av While(true) men går det inte att få in den utan någon loop? Så här ser min kod ut [code]

Vad är det som inte fungerar om du tar bort while-loopen?

Permalänk
Medlem
Skrivet av dotaponny:

Är halvt fast på samma uppgift, får det mesta att funka men får bara in min try/catch när jag använder mig av While(true) men går det inte att få in den utan någon loop? Så här ser min kod ut

namespace sistaförsöket { class Program { static int Fahrtocel(int fahr) { int cel = ((fahr - 32) * 5 / 9); return cel; } static void Main(string[] args) { int cel; int fahr; do { Console.WriteLine("Welcome to the sauna, please enter the temperature in Fahrenheit."); while(true) try { fahr = int.Parse(Console.ReadLine()); break; } catch(Exception e) { Console.WriteLine(e.Message); continue; } cel = Fahrtocel(fahr); if (cel < 73) { Console.WriteLine("The temperature is too low, turn it up."); } else if (cel > 77) { Console.WriteLine("The temperature is too high, turn it down."); } else if (cel == 75) { Console.WriteLine("The temperature is perfect."); } else { Console.WriteLine("The temperature is okay."); } } while (cel <= 73 || cel >= 77); Console.WriteLine("Enjoy the sauna! =)"); Console.ReadKey();

Orsaken till att din "while(true)" gör att det funkar är för att du har en "break;" efter din parse. Detta gör att du hoppar ur din While(true) loop. Tar du bort loopen, samt din "break"; så kommer det fungera korrekt.

try{ fahr = int.Parse(Console.ReadLine()); }catch(Exception e){ Console.WriteLine(e.Message); continue; }

Tar du bort "while(true)" gör din "break;" att du hoppar ur din do-while, vilket du inte vill.

Permalänk
Skrivet av Hot Dogs:

Orsaken till att din "while(true)" gör att det funkar är för att du har en "break;" efter din parse. Detta gör att du hoppar ur din While(true) loop. Tar du bort loopen, samt din "break"; så kommer det fungera korrekt.

try{ fahr = int.Parse(Console.ReadLine()); }catch(Exception e){ Console.WriteLine(e.Message); continue; }

Tar du bort "while(true)" gör din "break;" att du hoppar ur din do-while, vilket du inte vill.

Om jag tar bort ”while (true)” loopen, så får jag error längst ner inom paranteserna efter while. Use of unassigned local variable ’cel’.

Permalänk
Skrivet av perost:

Vad är det som inte fungerar om du tar bort while-loopen?

Om jag tar bort ”while (true)” loopen, så får jag error längst ner inom paranteserna efter while. Use of unassigned local variable ’cel’.

Permalänk
Medlem
Skrivet av dotaponny:

Om jag tar bort ”while (true)” loopen, så får jag error längst ner inom paranteserna efter while. Use of unassigned local variable ’cel’.

C# tillåter inte att man använder variabler innan man givit dem ett värde. Om du tar bort while-loopen så har du lite förenklat detta:

int cel; do { try { fahr = int.Parse(Console.ReadLine()); } catch (Exception e) { Console.WriteLine(e.Message); continue; } cel = Fahrtocel(fahr); ... } while (cel <= 73 || cel >= 77);

Om användaren matar in ett felaktigt värde så körs catch-satsen och continue; används för att hoppa över resten av loopen. Så långt allt rätt.

Men när du använder continue så kommer fortfarande while-villkoret att utvärderas för att kolla om loopen ska fortsätta med nästa iteration eller inte. Och eftersom även tilldelningen till cel hoppades över med continue så får du då fel eftersom cel används i while-villkoret utan att ha något värde.

Den enklaste lösningen är att helt enkelt se till att cel alltid har ett värde genom att ge den ett värde redan när den deklareras, t.ex. int cel = 0;.