Hjälp med try & catch
Hej ! Får det inte riktigt att funka med try and catch i min kod. Vill att programmet ska meddela användaren om den använder bokstäver istället för siffor. Är helt novis på detta ;)
Här är min kod än så länge :)
public static double FahrToCels(int fahr)
{
double temp = (double)fahr; // Tilldelar Fahr till double
temp = ((fahr - 32.0) * 5.0) / 9.0; // Beräknar Fahrenheit till Celsius
return temp; // Returnerar värde
}
//Här startar programmet
public static void Main(string[] args)
{
Console.WriteLine("Welcome please enter the tempeture in Fahrenheit : ");
int fahrenheit = int.Parse(Console.ReadLine()); //konvertera grader som användaren angett till heltal
double celsius = FahrToCels(fahrenheit);//konvertera fahrenheit till celsius
do
{
if (celsius < 73.0) //om temp lägre än 73
{
Console.WriteLine("Its too cold, please increase the temperature. "); // Skriv ut
}
else if (celsius > 77.0) // om temp högre än 77
{
Console.WriteLine("Its too hot, please lower the temperature. "); // Skriv ut
}
else
{
Console.WriteLine("Its the perfect temperature now enjoy! "); // Skriv ut
}
try // Se till att användaren använder siffror
{
fahrenheit = int.Parse(Console.ReadLine());
celsius = FahrToCels(fahrenheit);
}
catch
{
Console.WriteLine("Please use numbers! "); // Säga till användaren att hen måste använda siffror
Console.ReadLine();
}
} while (celsius < 73.0 || celsius > 77.0 ); // Villkor för att köras om
Console.WriteLine("Its the perfect temperature now enjoy! "); // Skriv ut
Console.ReadKey();
}}}
Uttrycket int.Parse(String)
i
fahrenheit = int.Parse(Console.ReadLine());
är den som måste läggas inom en try/catch precis som du gjort inne i loopen.
Men du har den koden även i början av programmet och där finns ingen try/catch.
Se till att du bara har ett ställe där du skriver ut "Welcome please enter the temperature in Fahrenheit" och gör int.Parse(), och att det sker inom en try/catch.
Du vill dessutom att det ska ske inuti loopen eftersom användaren ska mata in värdet ända tills det är inom intervallet.
Och du måste ha ett värde för att kunna kontrollera det, alltså vill du ta in värdet före jämförelserna (dvs först i loopen).
Får det fortfarande inte att funka, men är riktigt ny på det här :)
Posta koden som den ser ut nu. Använd "Infoga programmeringskod" så det blir lätt att läsa.
class Program
{
public static double FahrToCels(int fahr)
{
double temp = (double)fahr; // Tilldelar Fahr till double
temp = ((fahr - 32.0) * 5.0) / 9.0; // Beräknar Fahrenheit till Celsius
return temp; // Returnerar värde
}
//Här startar programmet
public static void Main(string[] args)
{
Console.WriteLine("Welcome please enter the tempeture in Fahrenheit : ");
int fahrenheit = int.Parse(Console.ReadLine()); //konvertera grader som användaren angett till heltal
double celsius = FahrToCels(fahrenheit);//konvertera fahrenheit till celsius
try // Se till att användaren använder siffror
{
fahrenheit = int.Parse(Console.ReadLine());
celsius = FahrToCels(fahrenheit);
}
catch
{
Console.WriteLine("Please use numbers! "); // Säga till användaren att hen måste använda siffror
Console.ReadLine();
}
do
{
if (celsius < 73.0) //om temp lägre än 73
{
Console.WriteLine("Its too cold, please increase the temperature. "); // Skriv ut
}
else if (celsius > 77.0) // om temp högre än 77
{
Console.WriteLine("Its too hot, please lower the temperature. "); // Skriv ut
}
else
{
Console.WriteLine("Its the perfect temperature now enjoy! "); // Skriv ut
}
try // Se till att användaren använder siffror
{
fahrenheit = int.Parse(Console.ReadLine());
celsius = FahrToCels(fahrenheit);
}
catch
{
Console.WriteLine("Please use numbers! "); // Säga till användaren att hen måste använda siffror
Console.ReadLine();
}
} while (celsius < 73.0 || celsius > 77.0 ); // Villkor för att köras om
Console.WriteLine("Its the perfect temperature now enjoy! "); // Skriv ut
Console.ReadKey();
}}}
Felet blir väl i int fahrenheit = int.Parse(Console.ReadLine()); //konvertera grader som användaren angett till heltal den raden? förstår inte riktigt hur jag löser det :)
Du vill ha strukturen
do {
try {
// print "enter number"
// readline, parse int
} catch {
// print error message
continue;
}
// check value is within range and print messages if not
} while( ...)
Flytta upp try/catch-koden från slutet av loopen och lägg den först
Ta bort onödiga dubbletter!
Ta bort första try/catch innan loopen.
I catch, bort med
Console.ReadLine();
Innan loopen (högst upp i Main), bort med:
int fahrenheit = int.Parse(Console.ReadLine()); //konvertera grader som användaren angett till heltal double celsius = FahrToCels(fahrenheit);//konvertera fahrenheit till celsius
Flytta in till direkt efter try (i den enda try som nu är kvar).
Console.WriteLine("Welcome please enter the tempeture in Fahrenheit : ");
Om jag förstod dig rätt nu så borde koden se ut såhär nu?
class Program
{
public static double FahrToCels(int fahr)
{
double temp = (double)fahr; // Tilldelar Fahr till double
temp = ((fahr - 32.0) * 5.0) / 9.0; // Beräknar Fahrenheit till Celsius
return temp; // Returnerar värde
}
//Här startar programmet
public static void Main(string[] args)
{
do
{
try // Se till att användaren använder siffror
{
Console.WriteLine("Welcome please enter the tempeture in Fahrenheit : ");
fahrenheit = int.Parse(Console.ReadLine());
celsius = FahrToCels(fahrenheit);
}
catch
{
Console.WriteLine("Please use numbers! "); // Säga till användaren att hen måste använda siffror
}
if (celsius < 73.0) //om temp lägre än 73
{
Console.WriteLine("Its too cold, please increase the temperature. "); // Skriv ut
}
else if (celsius > 77.0) // om temp högre än 77
{
Console.WriteLine("Its too hot, please lower the temperature. "); // Skriv ut
}
else
{
Console.WriteLine("Its the perfect temperature now enjoy! "); // Skriv ut
}
} while (celsius < 73.0 || celsius > 77.0 ); // Villkor för att köras om
Console.WriteLine("Its the perfect temperature now enjoy! "); // Skriv ut
Console.ReadKey();
}}}
Börjar likna nåt!
Lägg till en
continue;
sist i catch så att loopen börjar om utan att efterföljande kod körs.
La till en continue; . Nu får jag dock error på alla fahrenheit och celsius som inte finns i den aktuella kontexten. Innan funkade det men inte riktigt som jag ville :P
Deklarera variablerna i början av Main.
int fahrenheit;
double celsius;
Tack ! En lokal variabel som inte har tilldelats används: celsius (CS0165) . Den som står efter while()
Hahah förstår inte hur den kan bli "error" / rödstreckad men inte någon annan celsius?
Du använder den utanför den "krullparentes" där den deklarerats.
Är krullparantes måsvinge? ^^ . behöver jag deklarera den på nytt då ?
En deklarerad variabel "finns" bara inom ett context. Du ska inte upprepa något, däremot deklarera den tillräckligt långt ut. Först i Main borde räcka men vet inte exakt hur programmet ser ut just nu.
Såhär ser det ut just nu
class Program
{
public static double FahrToCels(int fahr)
{
double temp = (double)fahr; // Tilldelar Fahr till double
temp = ((fahr - 32.0) * 5.0) / 9.0; // Beräknar Fahrenheit till Celsius
return temp; // Returnerar värde
}
//Här startar programmet
public static void Main(string[] args)
{
int fahrenheit;
double celsius;
do
{
try // Se till att användaren använder siffror
{
Console.WriteLine("Welcome please enter the tempeture in Fahrenheit : ");
fahrenheit = int.Parse(Console.ReadLine());
celsius = FahrToCels(fahrenheit);
}
catch
{
Console.WriteLine("Please use numbers! "); // Säga till användaren att hen måste använda siffror
continue;
}
if (celsius < 73.0) //om temp lägre än 73
{
Console.WriteLine("Its too cold, please increase the temperature. "); // Skriv ut
}
else if (celsius > 77.0) // om temp högre än 77
{
Console.WriteLine("Its too hot, please lower the temperature. "); // Skriv ut
}
else
{
Console.WriteLine("Its the perfect temperature now enjoy! "); // Skriv ut
}
}
while (celsius < 73.0 || celsius > 77.0 ); // Villkor för att köras om
Console.WriteLine("Its the perfect temperature now enjoy! "); // Skriv ut
Console.ReadKey();
}
}
}
Spontant ser jag inget fel (men inte kompilerat/testat).
Tycker ju krullparanteserna ser rätt ut, går det att prova sig fram så att den räcker längre ? :)
Möjligtvis en för mycket i slutet. Vad säger kompilatorn?
Tar jag bort en i slutet så säger att att en } förväntas. lägger jag till den får jag En lokal variabel som inte har tilldelats används: celsius (CS0165) och markerad den celsius som står efter while bara.
Ser inte varför. Testa att skriv "double celsius = 0.0;" i deklarationen (men borde inte behövas). Kan vara nån { eller } som sitter fel.
Nu funka det ! Tusen tack för hjälpen bästa !