16 svar
110 visningar
Hjälpmedplugget 11
Postad: 3 nov 19:45

Beräkna BMI i C#. Fel när programmet körs

Här är första delen av uppgiften BMI och därefter har jag klistrat in det jag har kommit fram till än så länge. Det funkar bra när jag kör programmet förutom när användaren ska skriva in sin längd, exempelvis 1.63  Då blir det nån error men jag förstår inte hur jag ska lösa det.

 

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;

namespace HelloWorld{ internal class Program { static void Main(string[] args) { Console.WriteLine("Welcome. We will start off by calculating your BMI and then we will proceed to your BMR.");

Console.Write("Please enter your weight in kilograms:"); string strNr = Console.ReadLine(); strNr = strNr.Replace(',', '.'); double weight = Convert.ToDouble(strNr);

Console.Write("Please enter your height in meters:");

string strheight = Console.ReadLine(); strheight = strheight.Replace(',', '.'); double height = Convert.ToDouble(strheight);

Console.Write("Please enter your gender:"); string strgen = Console.ReadLine();

Console.Write("Please enter your age:"); string strage = Console.ReadLine(); int age = Convert.ToInt32(strage);

double BMI = 1.3 * weight / Math.Pow(height, 2.5);

Console.ReadLine(); } }}

thedifference 409
Postad: 3 nov 20:07 Redigerad: 3 nov 20:13

Hej och välkommen. Använd {;}-knappen för att få snyggt formaterad kod:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HelloWorld
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Welcome. We will start off by calculating your BMI and then we will proceed to your BMR.");

            Console.Write("Please enter your weight in kilograms:");
            string strNr = Console.ReadLine();
            strNr = strNr.Replace(',', '.');
            double weight = Convert.ToDouble(strNr);

            Console.Write("Please enter your height in meters:");

            string strheight = Console.ReadLine();
            strheight = strheight.Replace(',', '.');
            double height = Convert.ToDouble(strheight);

            Console.Write("Please enter your gender:");
            string strgen = Console.ReadLine();

            Console.Write("Please enter your age:");
            string strage = Console.ReadLine();
            int age = Convert.ToInt32(strage);

            double BMI = 1.3 * weight / Math.Pow(height, 2.5);

            Console.ReadLine();
        }
    }
}

Jag kommer titta på den nu.

Edit: Jag får inget fel när jag kör den. Vad står det för dig?

Hjälpmedplugget 11
Postad: 3 nov 20:19 Redigerad: 3 nov 20:20

Det blir bara ett fel om en användare skriver in decimaler i vikt och längd. Exempelvis i vikt 50,4 och längd 1,63. Det blir fel oavsett om decimaltecknet är en komma eller en punkt. Det verkar som att felet inträffar vid double weight och double height raden. Det står då att indatasträngen hade ett felaktigt format.

Men om man skriver in heltal så funkar allt bra. 

sictransit 1122 – Livehjälpare
Postad: 3 nov 20:28 Redigerad: 3 nov 20:31

Välkommen till PluggAkuten och till den komplicerade verkligheten som rör hantering av tal.

I Sverige använder vi decimalkomma, medan man i exempelvis USA använder decimalpunkt.

De där raderna med Replace() försöker på något sätt ta höjd för det, men på fel sätt.

Convert.ToDouble() konverterar en sträng till en double och tar höjd för vilka landsinställningar din dator har. Om de är satta till Sverige, med svenska decimaltecken, så förväntar sig funktionen ett decimalkomma. Då får du följande exception om du skickar in något med decimalpunkt:

Unhandled exception. System.FormatException: The input string '42.3' was not in a correct format.
   at System.Number.ThrowFormatException[TChar](ReadOnlySpan`1 value)

Det hade förresten varit hjälpsamt om du postat det fel du fick istället för "nån error", men i detta fall var det ju ändå rätt lätt att lista ut vad som gick fel. 

Ta bort din Replace() som byter komma till punkt, så skall det nog fungera fint. Eller så kör du din kod på en dator som är inställd på exempelvis USA.

Hjälpmedplugget 11
Postad: 3 nov 20:32

Tusen tack! Nu gick det =)

Hjälpmedplugget 11
Postad: 4 nov 12:17

Nu när jag försöker köra programmet står det: please select a valid startup item. Hur gör jag det? Har googlat lösningen men det verkar inte funka

Hjälpmedplugget skrev:

Nu när jag försöker köra programmet står det: please select a valid startup item. Hur gör jag det? Har googlat lösningen men det verkar inte funka

Har du bytt namn på klassen Program eller metoden Main?

Hjälpmedplugget 11
Postad: 4 nov 13:29 Redigerad: 4 nov 13:36

Nä har inte ändrat något. 

 

Du har en drop-down i verktygsfältet där det står "Select Startup Item...". Kan du välja något där?

Hjälpmedplugget 11
Postad: 4 nov 14:05 Redigerad: 4 nov 14:07

Stängde ner och öppnade den igen och nu står det något annat men det går fortfarande inte att köra programmet. 

Och såhär ser det ut när jag klickar på drop down:

oavsett vad jag klickar på i drop down så får är det inget som funkar, får bara upp build failed om och om igen

sictransit 1122 – Livehjälpare
Postad: 4 nov 14:07 Redigerad: 4 nov 14:12

Ja, du har väldigt många felmeddelanden längst ned.

Hur ser din kod ut nu? 

I fliken "Error List" (nere till vänster) får du en lista över allt den inte gillar när den skall bygga. Kika i den också.

Hjälpmedplugget 11
Postad: 4 nov 14:13

försökte skriva en switch sats längst ner så det var nog den som orsakade en massa errors men jag tog bort den och nu har jag denna kvar. dock så har jag ingen aning vad den vill att jag ska ändra på. jag kan inget om namespaces

Så här såg ditt program ut tidigare. Notera skillnaden mot det du postade nyss:

Hjälpmedplugget 11
Postad: 4 nov 14:31

tack så hemskt mycket!

Hjälpmedplugget 11
Postad: 6 nov 12:05

Har inte lyckats klura ut hur jag ska lösa det här. 

Posta hela din kod, formaterad som kod, som thedifference gjorde i svar #2 ovan. Det är jättesvårt att debugga skärmdumpar.

Hjälpmedplugget 11
Postad: 6 nov 12:45

Löste precis felen, behövde bara ta bort lite "{". Tack ändå

Svara
Close