Snabbfråga! Vad är fel med denna kodraden?

Permalänk
Medlem

Snabbfråga! Vad är fel med denna kodraden?

Tjena!

Läser programmering 1 på distans och har fått problem med en rad som gör att jag inte kommer vidare just nu..

int temp = Convert.ToInt32(str);

Vad är felet med denna? Får upp "System.FormatException: 'Indatasträngen hade ett felaktigt format.'" Skriver exakt så som det står i min bok, men något är ändå fel tydligen.
Tacksam för svar!

Permalänk
Medlem

Läste du felmeddelandet eller kopierade du det bara till tråden? Det är indatasträngen, dvs str som inte är korrekt.

Visa signatur

Spela Swemantle! Du vet att du vill.

Ibland har jag fel, men då är det någon annans fel.

Permalänk
Medlem

Hur skapar du str och vad innehåller den?

Skickades från m.sweclockers.com

Permalänk
Medlem

Rekommenderar int.TryParse(....) istället för felhantering.

Permalänk
Medlem

Såhär ser koden ut, tar som sagt stopp där vid int temp = Convert.ToInt32(str);

Console.Write("Mät vattnet. Ange temperatur: 100");
string str = Console.ReadLine();
int temp = Convert.ToInt32(str);

while (temp < 100)
{
Console.Write("Mät vattnet. Ange temperatur: 100");
str = Console.ReadLine();
temp = Convert.ToInt32(str);
}
Console.WriteLine("Nu kokar det!");

Permalänk
Medlem
Skrivet av LemonIllusion:

Läste du felmeddelandet eller kopierade du det bara till tråden? Det är indatasträngen, dvs str som inte är korrekt.

Kopierade felmeddelandet jag fick upp hit till tråden bara.
Okej! Hur ska jag göra för att det ska bli rätt?

Permalänk
Medlem
Skrivet av Chrilla:

Såhär ser koden ut, tar som sagt stopp där vid int temp = Convert.ToInt32(str);

Console.Write("Mät vattnet. Ange temperatur: 100");
string str = Console.ReadLine();
int temp = Convert.ToInt32(str);

while (temp < 100)
{
Console.Write("Mät vattnet. Ange temperatur: 100");
str = Console.ReadLine();
temp = Convert.ToInt32(str);
}
Console.WriteLine("Nu kokar det!");

Det är inga problem att köra den koden. Vad försöker du med för indata?
https://dotnetfiddle.net/KmQhkm

Visa signatur

Spela Swemantle! Du vet att du vill.

Ibland har jag fel, men då är det någon annans fel.

Permalänk
Avstängd

@Chrilla: Du får skriva in siffror som input så kommer det att fungera. Koden fungerar så länge som man inte skriver in något annat än siffror.

Permalänk
Medlem
Skrivet av snajk:

@Chrilla: Du får skriva in siffror som input så kommer det att fungera. Koden fungerar så länge som man inte skriver in något annat än siffror.

Hm, okej! Är helt färsk på det här, vart i koden ska jag skriva siffror menar du?

Permalänk
Medlem
Skrivet av LemonIllusion:

Det är inga problem att köra den koden. Vad försöker du med för indata?
https://dotnetfiddle.net/KmQhkm

Verkar ju inte fungera som den ska för mig i Visual Studio. Vad menas med indata?

Permalänk
Medlem
Skrivet av Chrilla:

Verkar ju inte fungera som den ska för mig i Visual Studio. Vad menas med indata?

Indata i detta fallet är temperaturen som användaren (du) skriver in. För denna koden MÅSTE det vara ett heltal och inget annat, annars krashar programmet.

Permalänk
Medlem
Skrivet av Devien:

Indata i detta fallet är temperaturen som användaren (du) skriver in. För denna koden MÅSTE det vara ett heltal och inget annat, annars krashar programmet.

Allright! Men då borde det väl fungera eftersom jag skrivit 100?

Permalänk
Avstängd

@Chrilla: Jo det borde funka. Testa att köra debug och se vad som går fel.

Permalänk
Inaktiv

Tror du missförstår något. Du har skrivit 100 i koden men du ska ju skriva det på kommandoraden när du kör programmet.

Ändra
Console.Write("Mät vattnet. Ange temperatur: 100");

till
Console.WriteLine("Mät vattnet. Ange temperatur:");

När du kör ska du få
> Mät vattnet. Ange temperatur:
> |

Och den väntar på din inmatning. då skriver du 100 och enter.

Permalänk
Medlem
Skrivet av snajk:

@Chrilla: Jo det borde funka. Testa att köra debug och se vad som går fel.

När jag exekverar koden så kommer det upp "Mät vattnet. Ange temperatur: 100"
Sen trycker jag enter och då "kraschar" det, sen får jag upp det här meddelandet:

Exception Unhandled
System.FormatException: 'Indatasträngen hade ett felaktigt format.'

och det är riktat till den här raden i koden: int temp = Convert.ToInt32(str);

Förstår inte vad som ska rättas till..

Permalänk
Medlem
Skrivet av anon304340:

Tror du missförstår något. Du har skrivit 100 i koden men du ska ju skriva det på kommandoraden när du kör programmet.

Ändra
Console.Write("Mät vattnet. Ange temperatur: 100");

till
Console.WriteLine("Mät vattnet. Ange temperatur:");

När du kör ska du få
> Mät vattnet. Ange temperatur:
> |

Och den väntar på din inmatning. då skriver du 100 och enter.

Tack! Där satt den, haha! Vilken miss.. som sagt helt ny på detta! Nu funkar det.
Tack för hjälpen

Permalänk

Kan inte språket ifråga, men ett annat potentiellt problem med kodraden är trunkering från int32 till int.

Permalänk
Medlem
Skrivet av Ståupptuppen:

Kan inte språket ifråga, men ett annat potentiellt problem med kodraden är trunkering från int32 till int.

Extremt ovanligt att en int är nåt annat än en int32 på moderna system, oavsett språk (C-liknande).

Visa signatur

Arbets- / Spelstation: Arch Linux - Ryzen 5 3600 - RX 7900 XT - 32G DDR4
Server: Arch Linux - Core i5-10400F - 16G DDR4

Permalänk
Medlem
Skrivet av Chrilla:

Tack! Där satt den, haha! Vilken miss.. som sagt helt ny på detta! Nu funkar det.
Tack för hjälpen

Ta en titt på debugging och breakpoints i Visual Studio. Väldigt användbart för att se vad som händer.

https://docs.microsoft.com/en-us/visualstudio/debugger/using-...

Visa signatur

| MSI B650 Tomahawk | Ryzen 7 9800X3D | ASUS RTX 3070 | 64GB DDR5 6000MHz | MSI MPG A1000G | Samsung 970 Evo M.2 1TB + 2x WD Black SN850X 2TB|

Permalänk
Skrivet av Chrilla:

Tack! Där satt den, haha! Vilken miss.. som sagt helt ny på detta! Nu funkar det.
Tack för hjälpen

Ett tips är att tidigt börja använda try/catch block överallt där du gör någonting med datan. Det underlättar fruktansvärt när du sedan debuggar.
Då programmet i sig är litet så kanske det känns som overkill, men ju fler filer och större filer så blir det enklare att se då man debuggar vad som felar och sedan kunna hantera det

Visa signatur

SteamDeck + Lenovo docka