C# Ohmsches gesetz kleiner bug

PeterParty

Lt. Junior Grade
Registriert
Aug. 2008
Beiträge
282
Hi,

Ich habe mich heute Mittag mal rangegeben das ohmsches Gesetz in C# zu Schreiben/bzw. eine art "Taschenrechner".

Nun habe ich leider noch einen kleinen Bug....
und zwar habe ich die Fehlerüberprüfung in einer Funktion mit "Try" und "Catch",dass funktioniert auch soweit, nur leider kommt die Fehlermeldung immer 2 mal.

Teile vom Quellcode:


Funktion
Code:
double Eingabe(TextBox tb)

        {
            double a = 0.0;
            try
            {
                a = Convert.ToDouble(tb.Text);
            }
            catch
            {
                MessageBox.Show("Felher01");          
            }
            return a;


Ausrechnung:

Code:
if (radioButton1.Checked)
            {

                double a = Eingabe(tb_2);
                double b = Eingabe(tb_3);
                double c = b * a;
                tb_1.Text = c.ToString();

Ich hoffe jmd. erkennt meinen Fehler... Das er Quasi die Felhermeldung 2 mal ausgibt wenn ich in beiden z.b. einen Buchstaben eingebe.


Mfg

Peter/Luca
 

Anhänge

hi

Code:
1if (radioButton1.Checked)
2           {
3
4               double a = Eingabe(tb_2);
5                double b = Eingabe(tb_3);
6                double c = b * a;
7                tb_1.Text = c.ToString();
            }


gibst du bei beiden Eingaben nen Buchstaben an wird einmal in Zeile 4 und einmal in 5 der Fehler geworfen...
da du die Eingabe-Methode ja auch zweimal nacheinander aufrufst und bei jedem Aufruf ein Fehler geworfen wird

gruß
 
a,b,c als Variablennahmen? Beim Ohmschen Gesetzt? :D

Da könntest du ohne viel Tipparbeit auch u,r,i verwenden und jeder weiß was was ist ;-)


edit: Das absichern korrekter Eingaben bei Programmieren ist ne nervige Sache und kann viel Arbeit bedeuten. Zum üben würd ich einfach von "korrekter Benutzung" ausgehen.
Es ist nicht ungewöhnlich, dass Fehlerbehandlung und Logmeldungen ähnlich viel Code ausmacht wie die Funktionalität an sich
 
Zuletzt bearbeitet:
ja , ich weiß es funktioniert ja:D ich bin zu kleinkariert xD

Nur leider lässt mir sowas immer keine ruhe...auch wenn es nur so ein "kleiner" Fehler ist.


Mfg
Luca
 
da wär ich vorsichtig...
wie der Vorredner schon meint, das Fehlerabfangen ist so ein Ding, du hast ja 2 verschiedene Fehler dann...
was gehen würde im catch Block setzt du ne "Fehlervariable" z.B error als char oder sowas, im ersten catch Block error = 1, im zweiten catch Block sowas wie if(error==1) error=3; else error = 2.
Du hast ja 3 mögliche Fehler
Eingabe 1
Eingabe 2
Eingabe 1 u 2

und nach dem letzten catch kommt je nach error ne sys msg... bei 0 nichst blabla

denk das sollte reichen oder ;)


gruß
 
Danke schonmal für deine Hilfe, ich sehe schon das dass was ich vorhabe ziemlich komplieziert istxD (für mich) . Da habe ich mir gedacht, machst du halt noch was kleiners wie z.b. Das man nicht mit "0" Teilen kann....Nur leider wieder kein erfolg.


Code:
double u = Eingabe(tb_1);
              double r = Eingabe(tb_2);
              if (u < 1)
              {

                  MessageBox.Show("Fehler02");
                  return;

              }
              else
              {
                                  
                
                  double i = u / r;
                  tb_3.Text = i.ToString();
              
              }



Kann mir vlt einer Helfen ?

ist bestimmt ein total dummer Fehler:)

Mfg

Luca
 
Thx,soweit alle Fehler behoben..bis auf den einen,da komme ich aber mit meinem jetzigen wissen leider nicht weiter..

Naja, danke für die tolle Hilfe

Mfg

Peter
 
aufm Heimweg im Zug mal kurz getippt:
(geht bestimmt besser ...


Code:
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public double Eingabe(TextBox tb)
        {
            double val=0.0;
            try
            {
                val = Convert.ToDouble(tb.Text);
            }
            catch
            {
                val = -1;
            }
            return val;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int error=0;
            double u = Eingabe(textBoxU);
            if (u == -1) error = 1;
            double i = Eingabe(textBoxI);
            if ((u == -1) && (i == -1)) error = 3;
            else if (i == -1) error = 2;
            double r=0.0;
            if (error == 0)
            {
                r = u / i;
                textBoxR.Text=Convert.ToString(r);
            }
            else MessageBox.Show("Fehler " + error);
        }
    }
}

3 Textboxen TextBoxI / U / R
1 Button

die Fehlerausgabe nicht im catch Block...
dadurch kannste in der Buttonmethode die Fehler sammeln

anstatt dem else MessageBox... könntest auch else if (error==1) MsgBox.Show("Fehler U falsches Format)
else if(error==2)....


man könnte natürlich noch negative Werte abfangen
aber das überlass ich dir mal
 
Zuletzt bearbeitet:
hmm ich habe eine ExtendedErrorProvider geschrieben, denn Code kannst du nehmen und in deine GUI einbinden. Da kannst du schön nach dem Klick erstmal überprüfen ob alle eingaben richtig gemacht wurden. Wenn es nicht so sein sollte, wird kein Exception geworfen, sondern eine Fehlermeldung wie bei einem ErrorProvider. Was ich geschrieben habe ist sehr schön, wenn du nur Text oder nur Zahlen haben willst.
Musst du halt im Forum hier die beiträge durchsuchen. Ohne fleiß kein Preis :D
 
Hey, Super ich habe es jetzt mal mit R*I =U Versucht Funktioniiert Super!! Morgen Versuch ich noch die anderen beiden Funktionen hinzuzufügen und dan ist das kleine Programm "bug" frei xD

Danke für deine Tolle Hilfe...


Mfg

Luca
 
Zurück
Oben