Permalänk
Medlem

Behöver lite hjälp med c#

Kör nu en preparandkurs på programmering 1 online och har kört fast lite, uppgiften är att man ska i första metoden omvandla fahrenheit till celsius och sen skriva in en temperatur i fahrenheit i som ska motsvara mellan 73 och 77C, jag har gjort en do while loop på det hela, men när temperaturen hamnar under 73 eller över 77 så får användaren inte skriva in något nytt värde, utan den spammar det svaret jag har gett det, bifogar koden om någon har lust att peka mig åt rätt håll iallafall!

using System; namespace Uppgift_2._2 { class Program { // Metod för att omvandla fahrenheit till celsius static int FahrToCels(int fahr) { int temp = (fahr - 32) * 5 / 9; return temp; } static void Main(string[] args) { Console.WriteLine("Skriv in temperaturen i Fahrenheit: "); // Ber användaren skriva in temperatur i fahrenheit int fahrenheit = int.Parse(Console.ReadLine()); int celsius = FahrToCels(fahrenheit); // Ropar på andra metoden och räknar om det till celsius do // Gör en do while loop { if (celsius < 73) // Om temperaturen är under 73C så säger programmet att det är för kallt och användaren ska öka temperaturen { Console.WriteLine("Alldeles för kallt!"); Console.WriteLine("Öka temperaturen"); } else if (celsius > 77) // Annars om temperaturen är över 77C så säger programmet att det är för varmt och användaren ska sänka temperaturen { Console.WriteLine("Alldeles för varmt"); Console.WriteLine("Sänk temperaturen"); } else if (celsius == 75) // Men om användaren skriver in den perfekta temperaturen så skriver programmet att hen valt perfekt temperatur { Console.WriteLine("Perfekt temperatur"); } } while (celsius < 73 || celsius > 77); // Loopen fortsätter tills temperaturen hamnar mellan 73C och 77C Console.WriteLine("Nu bastar vi!"); } } }

Permalänk
Avstängd

@Vinvega: Du måste fråga om temperaturen inom din loop, annars frågar du ju bara en gång liksom.

Permalänk
Medlem

@snajk: Har provat, då blir debug rutan svart bara och ingen fråga kommer upp, trycker jag in ett värde så uppfattar den värdet och sen spammar ut som innan

Permalänk
Medlem

Detta eftersom din inmatning ligger utanför loopen. Du vill ju mata in ett nytt värde varje gång loopen körs.

Edit: Var lite sen på den tydligen.

Permalänk
Medlem

Du ändrar aldrig på celsius inne i loopen, så loopen kommer förstås göra samma sak i varje iteration. Gör inläsningen i början av loopen istället.

Permalänk
Medlem

@vinvega Har du satt frågan, inmatningen samt omvandlingen innanför loopen?

Permalänk
Avstängd
Skrivet av Vinvega:

@snajk: Har provat, då blir debug rutan svart bara och ingen fråga kommer upp, trycker jag in ett värde så uppfattar den värdet och sen spammar ut som innan

Nedan funkar bra för mig:

using System; namespace Uppgift_2._2 { class Program { // Metod för att omvandla fahrenheit till celsius static int FahrToCels(int fahr) { int temp = (fahr - 32) * 5 / 9; return temp; } static void Main(string[] args) { int celsius; do // Gör en do while loop { Console.WriteLine("Skriv in temperaturen i Fahrenheit: "); // Ber användaren skriva in temperatur i fahrenheit int fahrenheit = int.Parse(Console.ReadLine()); celsius = FahrToCels(fahrenheit); // Ropar på andra metoden och räknar om det till celsius if (celsius < 73) // Om temperaturen är under 73C så säger programmet att det är för kallt och användaren ska öka temperaturen { Console.WriteLine("Alldeles för kallt!"); Console.WriteLine("Öka temperaturen"); } else if (celsius > 77) // Annars om temperaturen är över 77C så säger programmet att det är för varmt och användaren ska sänka temperaturen { Console.WriteLine("Alldeles för varmt"); Console.WriteLine("Sänk temperaturen"); } else if (celsius == 75) // Men om användaren skriver in den perfekta temperaturen så skriver programmet att hen valt perfekt temperatur { Console.WriteLine("Perfekt temperatur"); } } while (celsius < 73 || celsius > 77); // Loopen fortsätter tills temperaturen hamnar mellan 73C och 77C Console.WriteLine("Nu bastar vi!"); } } }

Däremot hinner man inte se den sista ok-utskriften, men det kan du säkert lösa själv.

Permalänk
Medlem

@Forsgren: Sätter jag det innanför do while loopen så förstår den inte vad celcius inne i (while) betyder "The name 'celsius' does not exist in the current context test"

Permalänk
Medlem

@perost: Menar du av

Console.WriteLine("Skriv in temperaturen i Fahrenheit: ");

Eller något annat?

Permalänk
Medlem

@Vinvega: Då kan du deklarera den utanför men ändra den innanför sedan.

Det finns ett exempel ovan som visar vad jag menar. Deklarerar celcius utanför medan frågan, inmatning och omvandling är innanför!

Du kan läsa på om scope (of a variable) om du känner dig osäker på hur det fungerar.

Permalänk
Avstängd

@Vinvega: Som @Forsgren säger så måste du initiera din celsiusvariabel utanför loopen, men övrig logik för att fråga om input, omvandla och så vidare får du göra inne i loopen. Det var precis det jag gjorde när jag flyttade runt lite i din kod.

Permalänk
Medlem

@snajk: Oj, tack! Så om jag fattar rätt så satte man en local

int celsius;

utanför do while loopen så att den kan hitta värdet? Är som sagt helt nybörjare så har en brant uppförsbacke framför mig

Permalänk
Medlem
Skrivet av Vinvega:

@L.Forsgren: Sätter jag det innanför do while loopen så förstår den inte vad celcius inne i (while) betyder "The name 'celsius' does not exist in the current context test"

Är det måhända så att du flyttar deklarationen av celsius till inuti do loopen? Om du tänker att ett do block skapar ett scope, vad händer i så fall när du flyttar in deklarationen?

Permalänk
Avstängd
Skrivet av Vinvega:

@snajk: Oj, tack! Så om jag fattar rätt så satte man en local

int celsius;

utanför do while loopen så att den kan hitta värdet? Är som sagt helt nybörjare så har en brant uppförsbacke framför mig

Precis.

Permalänk
Medlem

@Vinvega: Ja, nu tillhör den variabeln ett större scope. I ditt fall, hela Main.

Permalänk
Medlem

Tack för snabb hjälp allesammans, märks att det är semester tider

Permalänk
Avstängd
Skrivet av Vinvega:

Tack för snabb hjälp allesammans, märks att det är semester tider

Sitter faktiskt och jobbar hemifrån idag. Skönt att slappna av lite från extremt komplicerad C# med lite enklare..