Programmering 1 C# - Bastuuppgiften

Permalänk
Medlem

Programmering 1 C# - Bastuuppgiften

om jag skriver ut för hög temperatur, oavsett hur högt eller lågt jag skriver matar den bara ut att jag ska "sänka värmen". Vise versa om jag skriver ut en för låg temperatur. Såhär ser koden ut just nu

// metod som omvandlar fahrenheit
// till celsius
private static int FahrToCels(int fahr)
{

int cel = ((fahr - 32) * 5) / 9; //metod som beräknar fahrenheit till Celsius. konverterar.
return cel;
}
static void Main(string[] args)
{
Console.WriteLine("Ange grader för bastuaggregat i fahrenheit: "); //skriver ut sträng
int Fahrenheit = int.Parse(Console.ReadLine()); //användaren skriver in ett värde som lagrar fahrenheit
int Celsius = FahrToCels(Fahrenheit);
// i fahrenheit finns nu antal grader omvandlat
// från fahrenheit till celsius

do
{

if (Celsius < 73)
{
Console.WriteLine("skruva upp värmen litegrann, temperaturen är för låg: "); //säger till användaren att skruva upp värmen
Console.ReadLine();
Console.ReadKey();
}
else if (Celsius > 77)
{
Console.WriteLine("sänk värmen litegrann, temperaturen är för hög: "); //säger till användaren att sänka värmen
Console.ReadLine();
Console.ReadKey();
}
else
Console.WriteLine("nu kan du basta!"); //säger till användaren att det går att basta
Console.ReadLine();
Console.ReadKey();

} while (Celsius <= 73 || Celsius >= 77);
Console.WriteLine(Fahrenheit);
Console.ReadKey(true);

§3.1 förtydligade rubriken
Permalänk
Medlem

@jrgubben: Du läser in temperaturen före din do-loop, så temperaturen kommer aldrig att ändras inne i loopen och loopen kommer därför bara snurra runt och göra samma sak om och om igen. Flytta in inläsningen så att den ligger inne i loopen istället.

Du måste fortfarande deklarera Celsius-variabeln före loopen för att kunna använda den i villkoret för loopen, men du behöver inte ge den något värde innan du kommit in i loopen. D.v.s. gör inte det vanliga misstaget att ha inläsning både utanför och inne i loopen som jag sett många göra, det krånglar bara till koden helt i onödan.

För framtida inlägg så kan det förresten vara bra att känna till att du kan använda code-taggar för att formatera koden bättre här, d.v.s.:
[code]
Kod här
[/code]
blir:

Kod här

Permalänk
Medlem

Dags att debugga din kod. Börja med att skriva ut värdet av Celsius i din do-while loop, så ska du se att värdet aldrig ändras. Perost har helt rätt, du måste ändra värdet av Celsius i loopen

Skickades från m.sweclockers.com

Permalänk
Medlem

@perost: har lagt in läsningen av temperaturer i do loopen nu. Blir dock error i while och det står "Celsius does not exist."

while (Celsius <= 73 || Celsius >= 77);
Console.WriteLine(Fahrenheit);

Permalänk
Medlem
Skrivet av jrgubben:

@perost: har lagt in läsningen av temperaturer i do loopen nu. Blir dock error i while och det står "Celsius does not exist."

Ja, du flyttade troligtvis in deklarationen inne i loopen också. Men som jag skrev måste du fortfarande deklarera variabeln före loopen, annars kan den inte nås av villkoret i loopen. D.v.s.:

int Celsius; // Deklaration do { Celsius = ...; // Tilldelning } while (Celsius <= 73 || Celsius >= 77);

Permalänk
Medlem

@perost:

namespace Bastun { class Bastun { // metod som omvandlar fahrenheit // till celsius private static int FahrToCels(int fahr) { int cel = ((fahr - 32) * 5) / 9; //metod som beräknar fahrenheit till Celsius. konverterar. return cel; } static void Main(string[] args) { int Fahrenheit; int Celsius; do { Console.WriteLine("Ange grader för bastu i fahrenheit: "); //skriver ut sträng Fahrenheit = int.Parse(Console.ReadLine()); //skriver in ett värde som lagrar Fahrenheit Celsius = FahrToCels(Fahrenheit); // i fahrenheit finns nu antal grader omvandlat // från fahrenheit till celsius if (Celsius < 73) { Console.WriteLine("skruva upp värmen litegrann, temperaturen är för låg: "); //säger till användaren att skruva upp värmen Console.ReadLine(); Console.ReadKey(); } else if (Celsius > 77) { Console.WriteLine("sänk värmen litegrann, temperaturen är för hög: "); //säger till användaren att sänka värmen Console.ReadLine(); Console.ReadKey(); } else Console.WriteLine("nu kan du basta!"); //säger till användaren att det går att basta Console.ReadLine(); Console.ReadKey(); } while (Celsius <= 73 || Celsius >= 77); Console.WriteLine(Fahrenheit); Console.ReadKey(true); } } }

såhär ser det ut just nu och jag förstår fortfarande inte vad som är felet. Är nybörjare inom detta, förlåt om jag är trögfattad

Permalänk
Medlem

@jrgubben: Problemet löst! tack för hjälpen