Inlägg

Inlägg som Pellefant har skrivit i forumet
Av Pellefant

Tack så mycket, men verkar som att någon löst i den utan att tacka.

Av Pellefant
Skrivet av Jackbob:

Det @Blomman90 säger är alltså förenklat som:
1. Ta bort din inre while(true) loop. Men låt try, catch vara kvar i den större yttre loopen istället.
2. Byt ut din "break" mot "continue" .

Continue gör att loopen den är i börjar om på en helt ny iteration. Och om du då har inläsning och ett try catch i början av loopen så kommer den köra det tills inläsningen är lyckad.

Skickades från m.sweclockers.com

Testat att skriva så här i början av loopen istället, men det går inte ihop med det. Då får jag use of unassigned local variable 'f' och 'c' på dessa rader:

c = FahrToCels(f);

// Use of unassigned local variable 'f'

}while (c < cmin || c > cmax);

//Use of unassigned local variable 'c'

Dessa har bråkat med mig och fick endast bort det med en while loop i do-while loop.

Av Pellefant

@Blomman90, @Jackbob:

OK. Jag tackar för tipsen. Ska kika på det efter jag kommit hem från jobbet(, pluggar på distans, då jag jobbar heltid).

Det har inte riktigt satt sig och har haft svårt o ta in texten i det här kapitlet i läroboken. Jag satt mest igår med att få in att om användaren skriver in 0, då ska användaren få Fahrenheit slumpat. Man skulle skickas till en metod då enligt uppgiften, men det här med metoder och try-catch vill sig inte riktigt ännu.

Finns det någon youtubeserie ni kan rekommendera? Har precis upptäckt att c#-skolan har en youtube serie som jag ska kika på.

Av Pellefant
Skrivet av perost:

@dengudomlige: Använd continue för att direkt hoppa vidare till nästa iteration av loopen. Det fungerar så klart att göra som du gjort också, men koden blir lite enklare om du använder continue istället för en nästlad loop.

Jag har suttit i ett par timmar nu och försökt få ihop det, men lyckas ändå inte. Det är något jag missar. Hur kan det se ut istället om jag bifogar min kod här nedan? Testade nämligen också och få in att en siffra i fahrenheit ska slumpas om använder skriver in siffran 0. Får inte heller ihop det slumpmässiga talet och jag kanske ska låta bli det, eftersom jag inte riktigt har förståt mig på grunderna ännu.

namespace Amerikanaren { class Program { public static double FahrToCels(double fahrenheit) { return Math.Round((fahrenheit - 32) * 5 / 9,1); } public static void Main(string[] args) { double cstart = 0; double cmin = 73; double copt = 75; double cmax = 77; double c; double f; do { Console.Write("Please enter the desired temperature: "); while (true) { try { f = double.Parse(Console.ReadLine()); break; } catch (Exception) { Console.WriteLine("\nError, only enter digits"); Console.Write("Please enter the desired temperature: "); } } c = FahrToCels(f); if (c <= cstart) { Console.WriteLine("\nThe sauna is not active. Please enter a higher value."); } else if (c < cmin) { Console.WriteLine("\nThe sauna is not hot enough. Please enter a higher value {0}°C.", c); } else if (c > cmax) { Console.WriteLine("\nThe sauna is too hot. Please enter a lower value {0}°C.", c); } }while (c < cmin || c > cmax); if(c == copt) { Console.WriteLine("\nThe value that you have entered is the optimal temperature. The temperature is {0}°C. Enjoy the sauna!", c); } else { Console.WriteLine("\nThe value that you have entered is acceptable. The temperature is {0}°C. Enjoy the sauna!", c); } Console.WriteLine("Press any key to exit"); Console.ReadKey(); } } }

Skrivet av inquam:

Inte direkt för din uppgift, men om du precis börjar med programmering så skulle jag rekommendera dig att läsa: https://download-mirror.savannah.gnu.org/releases/pgubook/Pro...

Jag läste den tjugo år efter jag började, men oj vad jag hade önskat att jag hade den när jag började. Den går igenom hur saker faktiskt fungerar och bygger upp en förståelse för varför C/C++/C# osv ens finns. Hur otroligt lite magi som är inblandat när man laddar en DLL osv.

Tack för tipset! Ska kika på det. Måste först ta mig igenom denna uppgift bara.

Av Pellefant

@Blomman90:

Jag får inte ihop det utan att använda loop i try catch metoden. Hur får jag den att börja om på "do" när den hamnar på exception, utan att använda en loop? Har som sagt inte riktigt fått in det där med return.

Av Pellefant

@Blomman90: Ja jag förmodar att det inte är optimalt eller rekommenderas. Har inte riktigt fått koll på det här med try catch metoden som vi ska använda. Det var det sättet jag fick ihop det på. Jag vill att användar ska få börja om den skriver in en bokstav tex istället för en siffra. På detta sätt fick jag det o fungera.

Ska försöka plugga på mer kring try catch-metoden ikväll. Något tips på hur jag skulle få den delen o se ut istället?

Av Pellefant

@SanyaIV: Stort tack, har stirrat mig blind på det och inte hittat felet.

Nu ska jag finslipa koden. Sedan också försöka lösa om användaren skriver in 0 istället för att slumpa fram en siffra. Återkommer ifall jag inte får ihop det.

Av Pellefant

Hej igen,

Det var dags för att lämna in uppgift 2 "bastun" och ja koden fungerar, men inte som jag vill. Jag vill att den ska loopa tillbaka om temperaturen inte är 73-77 grader, men just nu hoppar den ur loopen oavsett. Jag har lagt till while (c < cmin && c > cmax); för att den ska endast hoppa ur om detta ej uppfylls. Är det där det har blivit fel?

Bifogar koden här nedan och undrar vart det har blivit fel i koden. Tack igen på förhand!

namespace Amerikanaren { class Program { public static double FToC(double fahrenheit) { return Math.Round((fahrenheit - 32) * 5 / 9,1); } public static void Main(string[] args) { double cstart = 0; double cmin = 73; double cmax = 77; double c; double f; do { Console.Write("Please enter the desired temperature: "); while (true) { try { f = double.Parse(Console.ReadLine()); break; } catch (Exception) { Console.WriteLine("\nError, only enter digits"); Console.Write("Please enter the desired temperature: "); } } c = FToC(f); if (c <= cstart) { Console.WriteLine("\nThe sauna is not active. Please enter a higher value"); } else if (c < cmin) { Console.WriteLine("\nThe sauna is not hot enough. Please enter a higher value {0}°C.", c); } else if (c > cmax) { Console.WriteLine("\nThe sauna is too hot. Please enter a lower value {0}°C", c); } }while (c < cmin && c > cmax); Console.WriteLine("The value that you have entered is acceptable. The temperature is {0}°C. Enjoy the sauna!", c); Console.WriteLine("Press any key to exit"); Console.ReadKey(); } } }

Av Pellefant

Jag ville bara tacka så mycket för hjälpen. Tycker inte att den boken vi ska läsa under denna distansutbildning har varit särskilt bra. Har nästan lärt mig mer av att googla fram diverse saker.

Har ni några rekommendationer för nybörjare? De rekommenderade en youtubekanal där man kan lära sig också. Tänkte jag ska kika lite där och kolla om den ger mig något mer istället. Har ni några rekommendationer för folk som läser programmering 1?

Är detta också rätt forum att fråga om man behöver hjälp med diverse saker eller finns det andra forum som man bör vända sig till? Tycker att det varit väldigt hjälpsamt, men undrar väl bara om det är passande eller accepterat på detta forum.

Av Pellefant

@suzieq , @KAD

Ser att jag har en del kvar att jobba med.

Funkar med "else if". Måste vara mer nogrann med när jag ska använda vilket. Den här videon jag har kikat på medans har nästan gjort det mer förvirrande.

Koden stannar ju och går ur loopen oavsett. Har nog en del kvar att arbeta med ändå. Trodde den skulle börja om loopen när (slump_tal == numuser) var falskt. Får ta en kik på det imorgon igen och får återkomma då. Tack för hjälpen.

Av Pellefant

Har en fråga till kring arbetet. Stort tack igen!

Vi har fått tre uppgifter och den andra gick mycket bättre. Den tredje har gått väldigt bra hittills, men får inte riktigt ihop det i slutet.

Random randomerare = new Random(); int slump_tal = randomerare.Next(1, 101); string numuserstring; int numuser; do { Console.WriteLine("Skriv en siffra mellan 1 och 100"); numuserstring = Console.ReadLine(); numuser = int.Parse(numuserstring); if (numuser > slump_tal) { Console.WriteLine("Ditt tal är större än den slumpade siffran"); } else (numuser < slump_tal) { Console.WriteLine("Ditt tal är mindre än den slumpade siffran"); } } while (slump_tal == numuser); Console.WriteLine("Du gissade rätt siffra"); Console.ReadLine();

Får ett fel på raden med

} else (numuser < slump_tal) {

Den förväntar sig ett ";" där. Varför och vart ska den sättas?

EDIT:
Glömde att nämna att uppgiften är att användaren ska gissa ett tal som slumpats fram mellan 1-100. Man ska använda dessa fyra:
1. Slumptal
2. Heltal
3. Loop med do och while
4. Villkor med if och else

Av Pellefant

Bifogar min slutgiltiga kod, istället för att redigera inlägget ovan.

string firstname; Console.WriteLine("Vad heter du i förnamn?"); firstname = Console.ReadLine(); string lastname; Console.WriteLine("Vad heter du i efternamn?"); lastname = Console.ReadLine(); Console.WriteLine("Hejsan " + firstname + " " + lastname + "! " + "Hur gammal är du?"); int age = int.Parse((Console.ReadLine())); if (age < 65) { Console.WriteLine(firstname + " " + lastname + " du har " + (65 - age) + " år kvar tills pensionen."); } else { Console.WriteLine("Du är redan pensionär, grattis!"); } Console.ReadKey(true);

Återigen, stort tack för hjälpen!!

Av Pellefant

@Alling @mmolder @Blomman90:

Redigerade inlägget som du kan se ovan. Nu verkar det som att jag gör som ni menar. Dock ger den mig fel på en rad.

EDIT: Ska testa det du skrev i din edit.

EDIT2: Jag tackar så oerhört mycket! Nu fungerar det och nu använder jag else if else korrekt. else har inget villkor, vilket jag gjorde fel. Jag snappade inte upp på hur man använder else korrekt.

En bonus att kanske lägga in är hur man gör om man skriver trettiotre istälet för 33? Hur kan man fixa det eller blir det kanske lite överkurs för mig som redan tycker det är svårt?

Av Pellefant

@Giuffria,@Slapinator, @zaibuf:

string firstname; Console.WriteLine("Vad heter du i förnamn?"); firstname = Console.ReadLine(); string lastname; Console.WriteLine("Vad heter du i efternamn?"); lastname = Console.ReadLine(); Console.WriteLine("Hejsan " + firstname + " " + lastname + "! " + "Hur gammal är du?"); int age = int.Parse((Console.ReadLine())); if (age < 65) { Console.WriteLine(firstname + " " + lastname + " du har " + (65 - age) + " år kvar tills pensionen."); } else (age >= 65) { Console.WriteLine("Du är redan pensionär, grattis!"); } Console.ReadKey(true);

Så här ser min kod ut just nu. Jag har testat era förslag, men jag får det inte och fungera. Testade att skriva int age; direkt, men det gav fel. Har sen ändrat till string age; istället och ändrat så att den konverterar istället genom Convert.ToInt32(age);.

Det vill sig dock inte.

Operator '<' cannot be applied to operands of type 'string' and 'int'
"

EDIT: Fick det nog att fungera genom att koden ser ut så här.

Dock ger den mig ; expected på raden med else (age >= 65) {

Av Pellefant

@AReal_Human @Alling:

För att förtydliga: Så här ser min kod ut just nu:

{ string förnamn, efternamn, ålder; //Vilka namn jag ska använda. Console.WriteLine("Vad heter du i förnamn?"); förnamn = Console.ReadLine(); Console.WriteLine("Vad heter du i efternamn?"); efternamn = Console.ReadLine(); Console.WriteLine("Hejsan " + förnamn + " " + efternamn + "! " + "Hur gammal är du?"); ålder = Console.ReadLine(); if (ålder < 65) { Console.WriteLine(förnamn + " " + efternamn + " du har " + (65 - Convert.ToInt32(ålder)).ToString() + " år kvar tills pensionen."); } else (ålder >= 65) { Console.WriteLine("Du är redan pensionär, grattis"); } Console.ReadKey(true); }

Jag får tre fel. På "rad if" ett fel och " rad else" två fel.

Sjukt tacksam för att ni tar er tid! Oerhört uppskattat!

Av Pellefant

@Alling:

if (ålder < 65) { Console.WriteLine(förnamn + " " + efternamn + " du har " + (65 - Convert.ToInt32(ålder)).ToString() + " år kvar tills pensionen."); } (ålder >= 65) >= 65 { Console.WriteLine("Du är redan pensionär, grattis"); } Console.ReadKey(true); }

Får inte alls ihop det, trots klämmorna.

Får väl två av dessa fel "Operator '<' cannot be applied to operands of type 'string' and 'int'
och en utav ";expected"

Av Pellefant

@AReal_Human:

Vart ska jag sätta in IF här? Försökt pilla med det en stund, men får inte till det. Bör jag göra om allt istället?

Testade att lägga till detta i slutet:

if (ålder < 65) Console.WriteLine("Hejsan " + förnamn + " " + efternamn + "! " + "Hur gammal är du?"); ålder = Console.ReadLine(); else (ålder >=65) Console.WriteLine(förnamn + " " + efternamn + " du har " + (65 - Convert.ToInt32(ålder)).ToString() + " år kvar tills pensionen.");

Utan framgång dock. Jag använder if och else på fel sätt förmodar jag.

Av Pellefant

Hjälp med programmering 1

Hejsan,

Jag har precis påbörjat programmering 1 på distans och har det väldigt tufft hittills måste jag säga. Jag är just nu på första uppgiften och ska lämna in arbetet här på tisdag.

Har en fråga kring uppgiften där man ska räkna ut pensionen. Så här ser min kod ut just nu:

string förnamn, efternamn, ålder; Console.WriteLine("Vad heter du i förnamn?"); förnamn = Console.ReadLine(); Console.WriteLine("Vad heter du i efternamn?"); efternamn = Console.ReadLine(); Console.WriteLine("Hejsan " + förnamn + " " + efternamn + "! " + "Hur gammal är du?"); ålder = Console.ReadLine(); Console.WriteLine(förnamn + " " + efternamn + " du har " + (65 - Convert.ToInt32(ålder)).ToString() + " år kvar tills pensionen."); Console.ReadKey(true);

Hur fixar jag detta om personen redan är pensionär och skriver in t.ex. 75?

Bör jag använda "If-Else-satsen"? Finns det någon bättre lösning på detta som jag redan nu bör veta?

Av Pellefant

Köper gärna konsolerna. Haft några problem med konsolerna?

Av Pellefant

@Bult:

På kvällen. Låt oss säga 21.00 så har jag låtit den ligga uppe i 24h. Skickar iväg den på tisdag under dagen isf.