C# - VS2008 - Code wird übersprungen

Dieses Thema im Forum "Webmaster Hilfe / Programmierer Forum" wurde erstellt von DaPole, 19.06.2014.

  1. DaPole

    DaPole Erfahrener Benutzer

    Dabei seit:
    12.01.2007
    Beiträge:
    2.508
    Zustimmungen:
    0
    Hallo zusammen,

    ich komm hier einfach nicht weiter.
    Ich habe ein ziemlich großes Projekt. Eigentlich funktioniert alles. Aber seid heute Mittag habe ich das Projekt etwas aufgeräumt / etwas erweitert und nun habe ich das seltsame Phänomen, dass bei mir der Quellcode ( beim kompilierten Programm / beim Debuggen / Immer) an einer stelle übersprungen wird.

    Er ignoriert eine ganze Anweisung. Hab schon versucht die in eine Zeile zu schreiben. in eine neue Anweisung etc....

    Code:
                    int pu1 = 0;
                    int pu2 = 0;
                    int pu3 = 0;
                    int pu4 = 0;
    
                    if (p1 != "")
                    {
                         pu1 = Convert.ToInt32(p1);
                    }
                    if (p2 != "")
                    {
                         pu2 = Convert.ToInt32(p2);
                    }
                    if (p3 != "")
                    {
                         pu3 = Convert.ToInt32(p3);
                    }
                    if (p4 != "")
                    {
                         pu4 = Convert.ToInt32(p4);
                    }
    
    
                    int dif1 = 0;
                    int dif2 = 0;
                    int dif3 = 0;
                    if (pu1 >= Konstante.MIN && pu1<=Konstante.MAX)   
                    {
                        werte++;
                        werte--;
                        werte++;
                    }
                    if (pu2 >= Konstante.MIN && pu2 <= Konstante.MAX)
                    {
                        dif1 = pu2 - pu1;                     werte++;
                        t1 = pu2 - pu1;
                        
                    }
                    if (pu3 >= Konstante.MIN && pu3 <= Konstante.MAX)
                    {
                        dif2 = pu3 - pu2;                    werte++;
                        t2 = pu3 - pu2;
                        
                    }
                    if (pu4 >= Konstante.MIN && pu4 <= Konstante.MAX)
                    {
                        dif3 = pu4 - pu3;                    werte++;
                        t3 = pu4 - pu3; 
                        
                    }

    Das Problem ist die Folgende Anweisung:

    dif3 = pu4 - pu3;

    Er überspringt die Anweisungen, indem die dif1, dif2, dif3 zugewiesen werden soll. Die Variable werte wird Ordnungsgemäß erhöht.
    Im nachhinein, habe ich die t's eingebaut. Die werden auch Ordnungsgemäß gefüllt. Die t's sind außerhalb der Methode deklariert. Deklariere ich Diese in der Methode, gehen diese auch nicht.


    Verstehe ich alles nicht, da die pu's auch in der Methode deklariert sind. Und die funktionieren ohne Probleme.
    Wäre cool wenn jemand Licht ins Dunkle bringen könnte.

    Hoffentlich habe ich mich verständlich ausgedrückt.

    Ach, ich sollte dazusagen, dass die Funktion / Methode, so wie sie ist, aber auch schon funktionierte. Und das Ordnungsgemäß!

    Programmiert wird unter VS 2008 SP1 - Compact Framework 2.0 ( Windows CE 5.0 Anwendung )

    Was hab ich schon Versucht:
    - Neustart
    - Projekt bereinigen / erstellen / neu erstellen etc....

    Sollte ich noch eine Erkenntnis machen bzw. die Lösung finden werde ich diese definitiv posten ;)


    Grüße
    DaPole
     
  2. AdMan

    schau mal hier: Windows-Wartungs-Tool. Viele Probleme lassen sich damit einfach beheben. Oftmals ist der PC dann auch schneller!
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren.
  3. Lotus

    Lotus Erfahrener Benutzer

    Dabei seit:
    17.02.2007
    Beiträge:
    2.428
    Zustimmungen:
    0
    Ehrlich gesagt hast du dich nicht wirklich verständlich ausgedrückt.

    Code:
    werte++;
    werte--;
    werte++;
    Was soll das bringen? Das ist im Endeffekt nichts anderes als: wert + 1 - 1 + 1. Dann kannst du auch gleich nur einmal + 1 rechnen. Aber okay.

    Ich weiß nicht genau, inwiefern die überprüfst ob deine Anweisung funktioniert oder korrekt ausgeführt wird. Du solltest eventuell ein paar Konsolenausgaben hinzufügen um zu überprüfen, an welcher Stelle die Werte gesetzt werden und ob sie richtig gesetzt werden. Zum Beispiel so:

    Code:
    if (pu4 >= Konstante.MIN && pu4 <= Konstante.MAX) {
        dif3 = pu4 - pu3;
        //console.log(dif3);
    }
    Ich kenne leider nicht den exakten Code für VB. Eventuell ist es auch ein println oder echo oder dergleichen. Darüber hinaus verstehe ich aber nicht was die t's mit den pu's zu tun haben. Im Endeffekt willst du doch dif3 und nicht die pu's haben. Wenn die t's außerhalb der Methode deklariert wurden, dann solltest du die dif's auch außerhalb der Methode deklarieren.

    Darüber hinaus ist es oftmals hilfreich sinnvolle Namen zu verwenden, anstatt mit t's und pu's zu arbeiten. Das erleichtert auch anderen sich deinen Code anzuschauen und schneller zu verstehen.
     
  4. #3 xandros, 20.06.2014
    xandros

    xandros IT Consultant, Cisco Registered Partner
    Moderator

    Dabei seit:
    05.07.2007
    Beiträge:
    25.891
    Zustimmungen:
    91
    Ort:
    Umkreis Duisburg, neben Mannheim, hinter Hamburg
    Wenn
    Code:
    dif3 = pu4 - pu3;
    nicht ausgefuehrt wird, dann ist zuerst einmal zu pruefen, ob die Bedingung der IF-Anweisung
    Code:
    if (pu4 >= Konstante.MIN && pu4 <= Konstante.MAX)
    ueberhaupt zutrifft. Und das laesst sich nur unmittelbar davor herausfinden, indem man sich die Werte von pu4, Konstante.MIN und Konstante.MAX gegenueberstellt.
     
  5. DaPole

    DaPole Erfahrener Benutzer

    Dabei seit:
    12.01.2007
    Beiträge:
    2.508
    Zustimmungen:
    0
    Hallo,

    erst mal Danke für die Antworten.
    in die IF-Anweisung geht er definitiv rein. Das kann ich beim Debuggen sehen. Ich kann auch beim debuggen sehen, dass er die dif's alle überspringt. Hab gestern die difs mal auserhalb deklariert, dann funktioniert auch der Code wieder.
    Was aber viel interessanter ist, dass der Code auch so funktionierte. ( In Funktion deklaration ) Bei den pu's funktionierts ja auch.


    Code:
    werte++;
    werte--;
    werte++;
    
    Dies habe ich nur als Test gemacht, um vielleichzt eventuelle Bugs auszuschließen. Das dies nicht ganz Sinnvoll ist, ist mir schon klar. Und das mit den Variablennamen ist auch ein Thema für sich :)

    Ich werde dieses Mysteriöm weiterhin beobachten. Sollte mir noch etwas auffallen gibts aufjedenfall ein Feedback.

    Grüße
     
  6. #5 xandros, 20.06.2014
    xandros

    xandros IT Consultant, Cisco Registered Partner
    Moderator

    Dabei seit:
    05.07.2007
    Beiträge:
    25.891
    Zustimmungen:
    91
    Ort:
    Umkreis Duisburg, neben Mannheim, hinter Hamburg
    Dann kannst du beim Debuggen auch (per Einzelanweisungssprung) sehen, welche Werte sich exakt zu diesem Zeitpunkt in den Variablen pu4, pu3 und der daraus resultierenden Subtraktion in dif3 befinden.


    Ich weiss nicht woher die Variablen pux ihre Werte erhalten und ob sie mit einem Wert ungleich NULL oder EMPTY vorbelegt sind.
    Code:
    if (p1 != "")
                    {
                         pu1 = Convert.ToInt32(p1);
                    }
    stellvertretend fuer alle diese Bloecke.
    Wenn p1 ungleich einer leeren Zeichenfolge ist, so wird die Folgeanweisung ausgefuehrt.
    Was nun, wenn p1 ungleich einer leeren Zeichenfolge ist, aber keinen Wert enthaelt der in Int32 konvertiert werden kann?
    "" ist nicht gleich 0 ist nicht gleich NULL ist nicht gleich EMPTY.
    Sofern in p1 der Wert 0 als CHAR steht, alles ok. Sofern in p1 NULL steht, wird als Ergebnis von Convert der Wert 0 auftauchen. Ist p1 allerdings EMPTY, rennt der Convert-Befehl gegen die Wand. Alle drei Faelle koennen eintreten, wenn p1 !="" wahr ergibt.
     
Thema:

C# - VS2008 - Code wird übersprungen

Die Seite wird geladen...

C# - VS2008 - Code wird übersprungen - Ähnliche Themen

  1. da-Vinci-Code-Datei????

    da-Vinci-Code-Datei????: Ich weiß nicht ob ich hier richtig bin, sonst bitte verschieben. Seit dem 11.11. stehen komplett alle unsere Fotos auf oben genannter...
  2. PC startet, jedoch kein Bild - Error Code 15

    PC startet, jedoch kein Bild - Error Code 15: Guten Abend, Ich habe ein mühsames Problem: Seit einiger Zeit hat mein PC die Make, dass er 2-3 anläufe braucht bis er anspringt (Wie ein...
  3. C# und MySQL

    C# und MySQL: Hallo zusammen! Ich bräuchte dringend hilfe von Experten, da ich ein totaler Anfänger bin. Ich habe eine vorhandene Excel Tabelle. Diese soll in...
  4. Aufrunden einer int in C

    Aufrunden einer int in C: Hi Leute, wie kann ich in C eine Zahl wie 53 auf die nächst größere Zahl welche durch 10 Teilbar ist aufrunden? Also von 53 auf 60 oder von 44...
  5. Visual C++ Problem

    Visual C++ Problem: Hallo Zusammen, habe neuerdings ein problem mit visual C++ wie es scheint. bei einigen Spielen startet er gar nicht mehr erst "Es wurde ein...