Vad har jag gjort fel i denna C#-kod?

Permalänk
Medlem

Vad har jag gjort fel i denna C#-kod?

Hej!
Vad jag gjorde fel här?

using System.Diagnostics.CodeAnalysis;

internal class Program
{
private static void Main(string[] args)
{
Console.WriteLine("Välkomna till denna pensionssimulator");
Console.ReadLine();
Console.WriteLine("Vad heter du i förnamn?");
string name = Console.ReadLine();

Console.WriteLine("Hur gammal är du?");
string ålderText = Console.ReadLine();
int ålder = int.Parse(ålderText);

int num1 = int.Parse(Console.ReadLine());
int num2 = 65;
int sum = num2 - num1;
string answer = ("Hej" + name + "." + "Du går i pension om" + sum + "år.");

if (sum > 46);
Console.WriteLine(answer);
Console.ReadLine();
}

}

§ 3.1 Trådrubriker ska tydligt visa vad tråden handlar om. - MOD
Permalänk
Medlem

Det är ett par konstigheter där, ett tips är att fråga ChatGPT så får du bra förklaringar och kan fortsätta dialogen och utveckla ditt programmerande.

Använder du tex Visual Studio Code så kan du också använda Copilot direkt i editorn.

Permalänk
Medlem

Vad är felet då?

Permalänk
Medlem

Förutsatt att resten av koden hade fungerat. Varför vill du att svaret "Du går i pension om..." bara visas om man är 0-18 år?

Visa signatur

Ryzen 7 7800X3D | ASUS TUF Gaming B650-Plus WIFI | Kingston 32GB (2x16GB) DDR5 6GT/s CL30 FURY Beast | Kingston Fury Renegade M.2 NVMe SSD Gen 4 2TB | MSI RTX 4060 8GB | Fractal Design Define S | MSI MPG A850G 850W | Thermalright Phantom Spirit 120 SE | Windows 11 Pro | AOC 27" AGON AG276QZD2 OLED QHD 240 Hz

Permalänk
Medlem

Rent krasst så ser det ju ut som kod har skrivits lite helt på måfå utan att egentligen förstå vad det faktiskt gör.

T.ex ReadLine() funktionen är specifikt för textinmatning, så du behöver slå på Retur-tangenten för att kunna avancera programmet. Du ber dessutom om att mata in en siffra två gånger och variabeln 'ålder' används aldrig.

if-satsen är dessutom fullständigt ologisk.

Visa signatur

| Corsair Obsidian 500D | Intel Core i7-3770K 3.9GHz med Corsair iCUE H115i Elite Capellix XT | Asus Z77 Sabertooth | Corsair Vengeance Pro Black 4x8GB 1866MHz CL9 | 2x EVGA GeForce GTX TITAN X 12GB, SLI | X-Fi Titanium Fatal1ty Pro | Samsung 870 EVO 2TB, Samsung 870 EVO 1TB, 2x Seagate Barracuda 2TB | Corsair AX860i | PG279Q | Windows XP/10 Dual-Boot |

Permalänk
Medlem

Som sagt t.ex. chat gpt löser detta

Det finns flera problem i din C#-kod som kan orsaka fel. Jag går igenom dem steg för steg:

1. Felaktig användning av semikolon i if-satsen

if (sum > 46);
Console.WriteLine(answer);

Problem:
Här har du ett semikolon (;) direkt efter if (sum > 46), vilket gör att villkoret blir meningslöst. Det betyder att Console.WriteLine(answer); alltid kommer att köras, oavsett om sum > 46 eller inte.

Lösning: Ta bort semikolonet efter if-satsen:

if (sum > 46)
{
Console.WriteLine(answer);
}

---

2. Ofullständig inmatning av num1

int num1 = int.Parse(Console.ReadLine());

Problem:
num1 är tänkt att vara användarens ålder, men den inläsningen sker efter att ålder redan har lästs in tidigare. Dessutom används ålder aldrig.

Lösning:
Ersätt num1 med ålder:

int sum = num2 - ålder;

---

3. Felmeddelande vid felaktig inmatning av ålder

Om användaren skriver något som inte är ett heltal (t.ex. "tjugo"), kraschar programmet.

Lösning:
Använd int.TryParse() för att säkerställa att inmatningen är en giltig siffra:

Console.WriteLine("Hur gammal är du?");
string ålderText = Console.ReadLine();
bool lyckadKonvertering = int.TryParse(ålderText, out int ålder);
if (!lyckadKonvertering)
{
Console.WriteLine("Felaktig inmatning! Ange en siffra för ålder.");
return;
}

---

4. Felaktig strängkonkatenering

string answer = ("Hej" + name + "." + "Du går i pension om" + sum + "år.");

Problem:
Saknas mellanslag i strängen, vilket gör att meddelandet blir svårt att läsa.

Lösning:

string answer = $"Hej {name}. Du går i pension om {sum} år.";

Använd interpolerad sträng ($"...") för att göra koden tydligare och enklare att läsa.

---

5. Felhantering av negativa pensionsår

Om användaren anger en ålder som är större än 65 blir sum negativt. Det kan vara bra att hantera det fallet:

if (sum < 0)
{
Console.WriteLine($"Hej {name}. Du har redan passerat pensionsåldern med {-sum} år!");
}
else
{
Console.WriteLine(answer);
}

---

6. Saknad using System;

Kodexemplet använder Console.WriteLine(), men System-namnrymden inkluderas inte. Lägg till:

using System;

---

Fixad kod

Här är en förbättrad version av din kod som hanterar alla ovanstående problem:

using System;

internal class Program
{
private static void Main(string[] args)
{
Console.WriteLine("Välkomna till denna pensionssimulator");
Console.ReadLine();

Console.WriteLine("Vad heter du i förnamn?");
string name = Console.ReadLine();

Console.WriteLine("Hur gammal är du?");
string ålderText = Console.ReadLine();
bool lyckadKonvertering = int.TryParse(ålderText, out int ålder);

if (!lyckadKonvertering)
{
Console.WriteLine("Felaktig inmatning! Ange en siffra för ålder.");
return;
}

int pensionsålder = 65;
int sum = pensionsålder - ålder;

if (sum < 0)
{
Console.WriteLine($"Hej {name}. Du har redan passerat pensionsåldern med {-sum} år!");
}
else
{
Console.WriteLine($"Hej {name}. Du går i pension om {sum} år.");
}

Console.ReadLine();
}
}

Förbättringar i den fixade koden:

✅ Tar bort onödiga semikolon i if-satsen.
✅ Byter ut num1 mot ålder för bättre logik.
✅ Använder int.TryParse() för att undvika krascher vid felaktig inmatning.
✅ Hanterar fall där åldern är större än pensionsåldern.
✅ Förbättrar strängformattering med string interpolation.
✅ Lägger till using System; för att säkerställa att Console fungerar korrekt.

Testa den nya koden och se om den fungerar som du tänkt!