Permalänk
Medlem

Kalkylator problem i C#

Har följt en guide i boken c# och NET av Erik Ronne där jag försökt få ihop en kalkylator men tyvärr så buggar den varje gång jag råkar trycka på lika med innan jag skrivit in två tal.

Koden

namespace calc { partial class Form1 { /// <summary> /// Required designer variable. private bool rensa = false; private float tal1; private float tal2; private float resultat; private string knapp = null; private System.ComponentModel.IContainer components = null; /// </summary> /// <summary> /// Clean up any resources being used. /// </summary> /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { private void rensaDisplayen() { if (rensa == true) { textBox1.Text = ""; rensa = false; } } private float omvandlaTextTillTal() { string texten = textBox1.Text.ToString(); //Här säger visual studio till att raden är fel när kalkylatorn buggar. float returtalet = float.Parse(texten); rensa = true; return returtalet; } private void lagraTal1() { tal1 = omvandlaTextTillTal(); rensa = true; } private System.Windows.Forms.ToolStripMenuItem InfoToolStripMenuItem; } }

Visa signatur

You cant dodge this bullet cause this aint The Matrix....

Permalänk
Medlem

Fånga felet:

try { float returtalet = float.Parse(texten); rensa = true; return returtalet; } catch (Exception e) { MessageBox.Show("Talet är inte korrekt: " + e.Message); } return float.NaN;

(NaN = Not a number, ungefär Floats motsvarighet till null)

Visa signatur

OSIRIS GUITAR - youtube-kanal om elgitarrer, mixning och teknik i hemmastudio

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av osiris8
Fånga felet:

try { float returtalet = float.Parse(texten); rensa = true; return returtalet; } catch (Exception e) { MessageBox.Show("Talet är inte korrekt: " + e.Message); } return float.NaN;

(NaN = Not a number, ungefär Floats motsvarighet till null)

Tyvärr så funkar inte den koden:S

Visa signatur

You cant dodge this bullet cause this aint The Matrix....

Permalänk

private float omvandlaTextTillTal()
{
string texten = textBox1.Text.ToString();
//Här säger visual studio till att raden är fel när kalkylatorn buggar.
try {
float returtalet = float.Parse(texten);
return returtalet;
} catch (e) {
System.Console.WriteLine("");
return false;
}

}

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av hagbarddenstore
private float omvandlaTextTillTal()
{
string texten = textBox1.Text.ToString();
//Här säger visual studio till att raden är fel när kalkylatorn buggar.
try {
float returtalet = float.Parse(texten);
return returtalet;
} catch (e) {
System.Console.WriteLine("");
return false;
}

}

private float omvandlaTextTillTal() { string texten = textBox1.Text.ToString(); //Här säger visual studio till att raden är fel när kalkylatorn buggar. try { float returtalet = float.Parse(texten); return returtalet; } catch (Exception e) { MessageBox.Show(e.Message); return 0; //Skicka tillbaka noll ifall ett fel kastades. } }

Borde vara någonting sådant istället eftersom det inte var ett consoleprogram han skrev

Ett annat sätt kan ju vara en if-sats där du kollar om längden på textBoxen är större än noll. Absolut bästa är ju en kombination med try-catch.

Varför använda float förresten? är inte double att föredra?

Visa signatur

Yay!

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Edholm

private float omvandlaTextTillTal() { string texten = textBox1.Text.ToString(); //Här säger visual studio till att raden är fel när kalkylatorn buggar. try { float returtalet = float.Parse(texten); return returtalet; } catch (Exception e) { MessageBox.Show(e.Message); return 0; //Skicka tillbaka noll ifall ett fel kastades. } }

Borde vara någonting sådant istället eftersom det inte var ett consoleprogram han skrev

Ett annat sätt kan ju vara en if-sats där du kollar om längden på textBoxen är större än noll. Absolut bästa är ju en kombination med try-catch.

Varför använda float förresten? är inte double att föredra?

Double är att föredra om man ska ha en lite mer avancerad kalkylator. Men eftersom denna bara ska ha + - * / så tänkte jag att det räcker med float.

Visa signatur

You cant dodge this bullet cause this aint The Matrix....

Permalänk
Medlem

Jag

Citat:

Ursprungligen inskrivet av vojnik
Double är att föredra om man ska ha en lite mer avancerad kalkylator. Men eftersom denna bara ska ha + - * / så tänkte jag att det räcker med float.

Jag tänkte mer på att det blir en liten prestandaökning. Tycker mig minnas att C# var uppbyggt med tanke på strängar och till viss del double. Rätta mig om jag har fel.

Visa signatur

Yay!

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Edholm
Jag

Jag tänkte mer på att det blir en liten prestandaökning. Tycker mig minnas att C# var uppbyggt med tanke på strängar och till viss del double. Rätta mig om jag har fel.

Vet faktiskt inte.Men de e inte så någa för det är inget ja tänkt att använda:D Kör hellre windows calcen:D

Visa signatur

You cant dodge this bullet cause this aint The Matrix....

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av vojnik
Vet faktiskt inte.Men de e inte så någa för det är inget ja tänkt att använda:D Kör hellre windows calcen:D

Hehe det förstår jag. Man gör programmen för att göra dem, inte för att använda dem

Visa signatur

Yay!

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Edholm
Hehe det förstår jag. Man gör programmen för att göra dem, inte för att använda dem

Nej inte denna calcen för det är en uppgift som jag ska lämna till läraren. Hade jag velat använda den hade jag kört in funktioner som cosinus, tangens och sinus samt alla major funktioner du kan hitta på en räknare:)

Visa signatur

You cant dodge this bullet cause this aint The Matrix....

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av vojnik
Tyvärr så funkar inte den koden:S

På vilket sätt funkar den inte (nog för att jag inte har provat att kompilera den men...)?

Visa signatur

OSIRIS GUITAR - youtube-kanal om elgitarrer, mixning och teknik i hemmastudio