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);
}
}
Vad blir det för fel?
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.'
Alltså jag får upp felet först när jag matar in temperaturer med decimaltal..
Matar du in tal med decimalkomma? Prova decimalpunkt i så fall.
med punkt
Då kanske det ska vara komma i stället.
Pröva att mata in ett heltal
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å?
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.
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 =)
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.
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?
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?
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.
tack