15 svar
647 visningar
ivana89 behöver inte mer hjälp
ivana89 8
Postad: 24 mar 2021 17:41

Väderstation

Övning 12.3 Väderstation
Skapa en vektor som ska inehålla temperaturmätningar från en väderstation. Användaren får själv bestämma antalet element och därefter ska hen mata in olika temperaturer som ska anges i decimaltal.
Jag får fel vid konverteringen av decimaltal..någon som kan hjälpa till?


static void Main(string[] args)
        {
            //Ta emot storlek på vektorn från användarn
            Console.Write("Ange antal temperaturer som du har mätt upp: ");
            string str = Console.ReadLine();
            int size = Convert.ToInt32(str);
            //Skapa vektorn:
            double[] temp = new double[size];
            //Tilldela vektorn element olika värden via for-loop:
            for (int i = 0; i < temp.Length; i++)
            {
                //Läs in värdet
                Console.Write("Ange temperatur " + i + ": ");
                str = Console.ReadLine();//återanvänd variabeln str!
                double element = Convert.ToDouble(str);//Här blir det fel
                //Lägg in värdet i vektorn på index i
                temp[i] = element;
            }
            //räknar ut summan av alla element
            double summa = 0;
            for (int i = 0; i < temp.Length; i++)
            {
                summa = summa + temp[i];
                Console.WriteLine("Temperaturerna är: " + temp[i]);
                Console.WriteLine("Medans summan för dom är: " + summa / temp.Length);
            }
	}
Laguna Online 30251
Postad: 24 mar 2021 19:19

Vad blir det för fel? 

ivana89 8
Postad: 24 mar 2021 19:46

Jag har försökt även med parse men det funkar fortfarande inte. Koden innan kompileringen har inga fel men när jag kör programmet så får jag upp felet 'Indatasträngen hade ett felaktigt format.'

ivana89 8
Postad: 24 mar 2021 19:49

Alltså jag får upp felet först när jag matar in temperaturer med decimaltal..

Laguna Online 30251
Postad: 24 mar 2021 19:57

Matar du in tal med decimalkomma? Prova decimalpunkt i så fall.

ivana89 8
Postad: 24 mar 2021 19:57

med punkt

Laguna Online 30251
Postad: 24 mar 2021 19:58

Då kanske det ska vara komma i stället.

Yngve 40157 – Livehjälpare
Postad: 24 mar 2021 19:58

Pröva att mata in ett heltal

ivana89 8
Postad: 24 mar 2021 20:02

ja det var komma, tack :-D
Men nu blev det något tokigt med resten av koden, alla inmatade temperaturer ska skrivas ut och därmed ska medelvärdet beräknas men det är bara första inmatade temperaturen som skrivs ut och medelvärdet blir då fel...:(
Vad kad det vara fel nu då?

Laguna Online 30251
Postad: 24 mar 2021 20:18

Jag ser inte vad det kan vara. Stoppa in en massa extra Console.WriteLine så du får veta t.ex. värdet på size och temp.Length, och skriv bara ut typ "hej" här och där så du ser hur mycket av koden som körs. Prova en debugger, om det finns en. Jag kan inte själv köra C#-kod.

datav 34
Postad: 24 mar 2021 21:12
Laguna skrev:

Jag ser inte vad det kan vara. Stoppa in en massa extra Console.WriteLine så du får veta t.ex. värdet på size och temp.Length, och skriv bara ut typ "hej" här och där så du ser hur mycket av koden som körs. Prova en debugger, om det finns en. Jag kan inte själv köra C#-kod.

Kan inflika med något inte relaterat till TS fråga - men repl.it är en mycket bra sida, kan flera olika diverse språk direkt i webbläsaren. Perfekt när man vill testköra kod från forumet för att hjälpa de felsöka =)

Laguna Online 30251
Postad: 24 mar 2021 21:55
datav skrev:
Laguna skrev:

Jag ser inte vad det kan vara. Stoppa in en massa extra Console.WriteLine så du får veta t.ex. värdet på size och temp.Length, och skriv bara ut typ "hej" här och där så du ser hur mycket av koden som körs. Prova en debugger, om det finns en. Jag kan inte själv köra C#-kod.

Kan inflika med något inte relaterat till TS fråga - men repl.it är en mycket bra sida, kan flera olika diverse språk direkt i webbläsaren. Perfekt när man vill testköra kod från forumet för att hjälpa de felsöka =)

Trevligt. Jag provkörde, och koden beter sig som jag förväntade mig, dvs. den skrev ut alla tal och berättade fortlöpande vad medelvärdet var (vilket förstås är fel fram till sista talet - den utskriften borde vara efter loopen).

Den vill ha tal med punkt den här gången, förresten.

Yngve 40157 – Livehjälpare
Postad: 24 mar 2021 22:23
ivana89 skrev:

ja det var komma, tack :-D
Men nu blev det något tokigt med resten av koden, alla inmatade temperaturer ska skrivas ut och därmed ska medelvärdet beräknas men det är bara första inmatade temperaturen som skrivs ut och medelvärdet blir då fel...:(
Vad kad det vara fel nu då?

Vad händer?

Vad matar du in och vilka utskrifter får du?

ivana89 8
Postad: 25 mar 2021 11:12

Tack, nu löste det sig. Den sista raden behövde flyttas utanför for-loopen :D 
Programmet  stängs dock fortfarande om jag skriver decimaltal med punkt ex. 12.5 , funkar bara med komma ex. 12,5.. Hur ska man felhantera såna här problem på bästa sätt och undvika programmkrasch? TryParse eller finns det något annat sätt?

Laguna Online 30251
Postad: 27 mar 2021 08:38

TryParse verkar det heta, ja.

Ett alternativ är att göra som du gör, men fånga exceptionet när det blir fel, hur man nu gör det i C#. Nåt block med try och catch, kanske, så heter det i andra språk.

ivana89 8
Postad: 27 mar 2021 16:51

tack

Svara
Close