variablenyp herausfinden



  • Nein, in C++ gibts sowas nicht. Außerdem wirst du das nur selten brauchen.

    Im Regelfall nur wenn du eine Art Skripting-Möglichkeit in dein Programm einbindest und zwischen dem Typsystem von C++ und deinen Metadaten übersetzen musst.

    Bei Benutzereingaben erwartest du immer etwas festes. Erwartest du z.B. eine Eingabe die ein String sein kann oder eine Zahl, lies das ganze in einen String ein und dann prüfe den Inhalt (z.B. mit einem regulären Ausdruck).



  • string nummer;
    
            cin >> nummer;
    
            if(nummer > 0){
    

    Error: 187 F:\Dev-Cpp\projects\window\master\main.cpp no match for 'operator>' in 'nummer > 0'



  • Erklär doch einfach mal was du genau machen möchtest, dann kann man dir auch am besten helfen, so kann man nur Raten was du tatsächlich willst.



  • bevor ich gleich alles umschreibe versuch ichs einfach mal auf die beste methode.

    du kennst bestimmt den batch befehl choice.
    diese option wäre perfekt dafür.

    ich hab eine liste von ips, zu denen man connecten möchte zb:

    1 1.1.1.1
    2 2.2.2.2
    3 6.2.5.2

    und dann noch befehle:

    r refresh
    0 schliesst das programm

    so sollte das jez im dosfenster aussehen.
    und dann muss ich im c++ die eingabe auswerten

    if(eingabe > 0){
    connect(iplist[eingabe])
    } else if(eingabe == "r"){
    refresh();
    ...

    du weist schon

    leider kennt anscheinend xpdos kein choice(erst ab dos 6.x)

    deswegen könnte es auch sein, dass der user quatsch eingibt (also keine der optionnen)

    dass ich mehere male einen int wert überprüfe und einen stringwert(damit meine ich "r") ist ja noch zu machen.
    ich würde einfach else für den fall "r" nehmen aber hier gibt ja 2 Mögl. :
    1. "r"
    2. irgend eiun müll wie: "kvbkiz"

    deswegen muss ich das auch überprüfen und dann meint er: ISO forbids comparision between integer and string oder sowas.



  • man macht in etwa folgendes:

    int wert;
    cin >> wert;
    
    while (cin.fail()) {
    
    cout >> "Eingabefehler\n";
    
    cin.seekg(0,ios::end);
    cin.clear()
    cin >> wert;
    }
    


  • Ich würd nen regulären Ausdruck verwenden, aber das ganze ist ja noch recht einfach zu validieren, da kannst auch einfach so schnell prüfen:

    string eingabe;
    
    getline( cin, eingabe);
    
    if( eingabe == "r" )
    {
        //refresh
    }
    
    for( int i = 0; i < eingabe.size(); ++i )
    {
       if( !isdigit( eingabe[ i ] ) )
          //ungültige eingabe, abbrechen
    }
    
    //Hier besteht eingabe nur aus Zahlen
    stringstream sstr( eingabe );
    int zahl;
    sstr >> zahl;
    
    if( zahl == 0 )
      //beenden
    
    if( zahl < kleinstmöglicheAuswahl || zahl > größtmöglicheAuswahl )
       //fehler ungültige Zahl
    
    //hier ist in zahl eine gültige auswahl
    

    Solltest so nicht 1:1 übernehmen, aber das Prinzip sollte dir so klar werden.



  • ok danke,

    aber jetzt kommt :
    204 F:\Dev-Cpp\projects\window\master\main.cpp variable `std::stringstream sstr' has initializer but incomplete type

    als fehler muss ich voll noch was includen?



  • Hallo

    #include <sstream>
    

    bis bald
    akari



  • jo danke hat geklappt.

    aber könnt ihr mir das hier mal bitte erklären? :

    for( int i = 0; i < eingabe.size(); ++i )
    {
       if( !isdigit( eingabe[ i ] ) )
          //ungültige eingabe, abbrechen
    }
    


  • du musst anstatt "//ungültige eingabe, abbrechen" einen befehl ein setzen der bei dir abbricht. Z.B. "return 1;".

    mfg.



  • ja aber ich möchte wissen, was dort passiert.
    bitte.



  • Hallo

    Was gibt es da groß zu erklären? Schleifen, Bedingungen und Operatoren kannst du in einem Grundlagen-Tutorial durchlesen.
    Die Funktion isdigit wird zum Beispiel hier erklärt.

    bis bald
    akari



  • füsig schrieb:

    jo danke hat geklappt.

    aber könnt ihr mir das hier mal bitte erklären? :

    for( int i = 0; i < eingabe.size(); ++i )
    {
       if( !isdigit( eingabe[ i ] ) )
          //ungültige eingabe, abbrechen
    }
    

    Ungefähr so viel, als das für jede eingegebene Ziffer einer zahl (bei 234 etwa die Ziffern 2,3 und 4) nacheinander durchgearbeitet werden und überprüft wird ob sie "normale" Ziffern sind.


Anmelden zum Antworten