tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
517
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    bau_house bau_house ist offline Rookie
    Registriert seit
    May 2006
    Beiträge
    6
    Hallo zusammen!

    Ich arbeite mit dem c++builder und möchte eine Abfrage machen, ob eine Eingabe vom Wert double ist. Falls ja, soll der Wert per seriell port raus geschickt werden und falls nicht, soll eine Art "falsche Eingabe..." - Fenster aufgehen, mit eigenem Text.
    Allerdings kommt mir dieses automatische Fehlerfenster ("soundso ist nicht float...") vom c++builder immer zuvor. Was kann ich da machen?

    Mein Ansatz:

    double wert;
    if (wert = eingabe->Text.ToDouble()){
    ApdComPort1->Output = wert;
    }
    else{....
    }

    Vielen Dank im Voraus!
    Besten Gruß!
     

  2. #2
    ASD20054 ASD20054 ist offline Mitglied Bronze
    Registriert seit
    Nov 2005
    Beiträge
    49
    HI,

    fang doch die Fehlermeldung mit Try und Catch ab:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
      try{
        double wert;
        if(wert = eingabe->Text.ToDouble()){
            ApdComPort1->Output = wert;
          }
        else{
            ...
          }
      }catch(...){
        ShowMessage("Falsche Eingabe");
      }

    Im Builder wird die Fehlermeldung dann noch so angezeigt wie vorher, wenn du aber das Programm ohne den Builder startest wird Falsche eigabe ausgegeben.

    MFG ASD20054
    Geändert von ASD20054 (12.05.06 um 20:14 Uhr)
     

  3. #3
    bau_house bau_house ist offline Rookie
    Registriert seit
    May 2006
    Beiträge
    6
    Danke erst mal für Deinen Tipp!

    Ich werde das probieren!
    Mir ist allerdings noch nicht klar, welche Bedingung dieses "catch" bekommen muss. Du hattest ja mit (...) angedeutet, dass da noch ein Wert gegeben werden muss.
    Und die else Bedingung ist bei dieser Variante überflüssig, sehe ich das richtig!?

    Ich kenne dieses try/catch bis jetzt noch gar nicht.

    mfg!
     

  4. #4
    ASD20054 ASD20054 ist offline Mitglied Bronze
    Registriert seit
    Nov 2005
    Beiträge
    49
    HI,

    also catch(...) kann so bleiben, da erhaltest du keine Fehlermeldung und musst auch keine Bedingung eintragen.

    MFG ASD20054
     

  5. #5
    Avatar von Krypthonas
    Krypthonas Krypthonas ist offline Mitglied Brokat
    Registriert seit
    Jun 2002
    Beiträge
    377
    Das was du in deiner Abfrage machst, ist keine Anweisung sondern Zuweisung. Desweiteren kannst du es mit den typecast Funktor herausfinden.

    Kleines Beispiel:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    #include <typeinfo>
    #include <iostream>
    #include <conio>
     
    using namespace std;
     
    main(){
      int wert1;
      double wert2;
     
      if(typeinfo(wert1) == typeinfo(double))
         cout << "wert 1 ist Fliesskomma";
      else if(typeinfo(wert2) == typeinfo(double))
        cout << "wert 2 ist Fliesskomma";
     
      getch();
    }

    Sicherlich kannst du unter Umständen die größe durch den Sizeof-Funktor herausfinden nur wird es spätestens bei Zeigern oder 64bit Systemen zu Schwierigkeiten führen.

    Desweiteren kannst du damit auch natürlich fragen ob ein Zeiger auf eine Datenstruktur/Datentyp die selbige ist, wie mit der zu vergleichenden.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    #include <typeinfo>
    #include <iostream>
    #include <conio>
     
    using namespace std;
     
    struct cat {
      int wert1;
    }*t1;
     
     
    main(){
      if(typeinfo(*t1) == typeinfo(double))
         cout << "Datentyp \"cat\" ist Fliesskomma";
     
      getch();
    }

    Typeid schaut quasi zur Laufzeit im Speicher nach, welche Klasse, bzw. welcher Datentyp hinter dem Argument sich befindet. Stimmen die einzelnen Datengrößen sowie Typen überein, kann von einem äquivalenten Datentyp-/Struktur gesprochen werden.
     

  6. #6
    bau_house bau_house ist offline Rookie
    Registriert seit
    May 2006
    Beiträge
    6
    Vielen Dank auch Dir Krypthonas!
    Sorry, dass ich so spät reagiere, war jetzt länger nicht an dem Projekt beschäftigt.

    Ich weiss, dass ich innerhalb der if-Abfrage if(wert = eingabe->Text.ToDouble()){ eine Zuweisung mache. Aber ich dachte, das wäre ok. So kenne ich das jedenfalls von C! Wenn die Zuweisung funktioniert, liefert sie eine 1 zurück, was wiederum die if-Abfrage positiv bestätigt. Wenn die Zuweisung nicht funktioniert, gibt es eine 0 und die if-Anweisung würde nix tun, oder eben einen else-Zweig ausführen.
    Geht das in C++ nicht?

    Für mein Problem ist das nicht wichtig, aber ich will ja was lernen!
    Ansonsten funktioniert diese try/catch - Sache wie gewünscht.

    Viele Grüße!
     

Ähnliche Themen

  1. AFX Fehlermeldung 17 § 18
    Von axn im Forum Videoschnitt, Videotechnik & -produktion
    Antworten: 1
    Letzter Beitrag: 02.11.05, 19:17
  2. [fehlermeldung] !
    Von derpbl im Forum Cinema 4D
    Antworten: 4
    Letzter Beitrag: 26.06.04, 14:42
  3. Fehlermeldung
    Von hAcKe im Forum C/C++
    Antworten: 4
    Letzter Beitrag: 07.02.04, 15:20
  4. fehlermeldung
    Von lieP im Forum Microsoft Windows
    Antworten: 10
    Letzter Beitrag: 04.08.03, 15:34
  5. fehlermeldung!
    Von icefire im Forum PHP
    Antworten: 14
    Letzter Beitrag: 30.07.03, 15:53