If-Else Abfrage mit Strings funktioniert nicht



  • Hallo, kann mir jemand helfen mit If-Else Abfragen.
    Mein Code, den das Programm nicht anerkennt:

    [Code()]
    //So initalisiere ich Strings
    char usrid[20]="Daniel";
    //Jetzt kommt die If-Else abfrage:
    if(usrid="Daniel"){newUser();}
    [/Code()]

    Ich habe in mein Programm ine While Schleife eingebaut. Er kommt da zwar rein, aber erkennt die Bedingung nicht:

    [code]
    while(shellinpt=="end")
    {
    cout << userid << "@" << usrct << ":#>/";
    cin.getline(shellinpt,20);
    }

    Danke vorraus.....



  • Ganz so einfach geht das leider nicht. 😃
    Schau dir mal strcmp() an. Das müsste helfen, wenn du deinen Code umbaust.



  • Geht das auch:

    char* shallinpt[20]="a";
    
    int main()
    {
     cout << "bitte Zeichenfolge eingeben:"; cin.getline(shellinpt,20);
     if(shellinpt=="b"){hallo();}
    }
    


  • DaniilKharlamov schrieb:

    Geht das auch:

    char* shallinpt[20]="a";
    
    int main()
    {
     cout << "bitte Zeichenfolge eingeben:"; cin.getline(shellinpt,20);
     if(shellinpt=="b"){hallo();}
    }
    

    Ist ja eigentlich eine blöde Frage, wiso probierst du es nicht aus und findest selber heraus das es nicht funktioniert und dann lies das Post von Maffe001 nochmal durch 😉

    Gruß
    Entyl Sa



  • Ja, mittlerweile habe ich das ausprobiert...fehlgeschlage. Dann habe ich mit folgendem versuch:

    #include <iostream>
    
    using namespace std;
    char shellinpt[20]="none", vergl[20]="a";
    
    int main()
    {
     cout << "Bitte ihren Namen eineben:";
     cin.getline(shellinpt,20);
     if(int strcmp(const char *shellinpt, const char *vergl))
     {
       funkt1();
     }
    }
    

    Das habe ich auch versucht....ging auch nicht. Ich kappiere es nicht. Mit Strings habe ich auch versucht:

    #include <iostream.h>
    #include <string.h>
    
    string shellinpt="none";
    
    int main()
    {
      cin >> shellinpt;
     if(shellinpt.compare("a")){ funktion2();}
    }
    

    kann mir jemand helfen?



  • DaniilKharlamov schrieb:

    Ja, mittlerweile habe ich das ausprobiert...fehlgeschlage. Dann habe ich mit folgendem versuch:

    [cpp]
    #include <iostream>

    using namespace std;
    char shellinpt[20]="none", vergl[20]="a";

    int main()
    {
    cout << "Bitte ihren Namen eineben:";
    cin.getline(shellinpt,20);
    if(int strcmp(const char *shellinpt, const char *vergl))
    {
    funkt1();
    }
    }
    [/cpp]

    Das habe ich auch versucht....ging auch nicht.

    Was bezweckst du mit den unterschtrichenen Typangaben. Das sollte doch eigentlich ein Funktionsaufruf sein. Dann schau dir nochmal genau an was strcmp() zurückgibt wenn der strings gleich sind.

    DaniilKharlamov schrieb:

    Mit Strings habe ich auch versucht:

    #include <iostream.h>
    #include <string.h>
    
    string shellinpt="none";
    
    int main()
    {
      cin >> shellinpt;
     if(shellinpt.compare("a")){ funktion2();}
    }
    

    kann mir jemand helfen?

    Auch hier solltest du dir wohl einfach mal ansehen was compare() im falle einer übereinstimmung zurückgibt.

    Gruß
    Entyl Sa



  • Ok, strsmp() gibt bei bleichheit eine 0 aus....
    Ist der Syntax richtig?
    Daniel



  • Wenn du den Rückgabewert von strcmp() auf null überprüfst und die Typangaben, die ich dir oben unterstrichen habe weglässt, dann sollte es funktionieren, aber das kannst du ja selber ausprobieren 🙂

    Du kannst im übrigen schon strcmp(shellinput, "a") schreiben, du brauchst hier nicht extra eine Variable für anlegen, und schon garkein viel zu grosses Array.

    In deinem zweiten Versuch mit string ist das im übrigen das einzige Problem das sie bei Gleichheit 0 zurück gibt.



  • Vielen dank...lust am Opne Source Proekt teilzunehmen?
    http://www.sccweb.de/daniil/Informatik/source1.zip



  • Ne, funktioniert immer noch nicht....
    Bei der If-Else Abfrage führt er alle Funktionen aus, obwohl er nur eine machen muss, kann mir jemand helfen?

    //Programm: Ferrox Multiplix
    //Include Deriktiven
    #include <iostream.h>
    #include <iomanip.h>
    #include <stdlib.h>
    #include <string.h>
    
    //Vordifinierte Funktionen
    int prgend(); int umrechn(); int nullst();
    int nfspf(); int spfnf(); int spf(); int nf(); int help();
    int credits(); int ifelse(); int ifelse2(); int shell();
    
    //Char/String Variablen Vordifinieren
    char shellinpt[20]="none";
    char pwdint[20]="/";
    char usrid[20]="none", usrct[20]="none";
    
    int main()
    {
     int nEnd=0;
     cout << "Initalizing (::Programm)." << endl;
     cout << "Set [language (::german)]..." << endl;
     cout << "Lade Kernel und Funktionen..." << endl;
     cout << "Set [Variable (:: UsrID, UsrCT)]..." << endl;
     cout << "Fertig." << endl;
     cout << endl;
     cout << "+############################+" << endl;
     cout << "# Administration [register]  #" << endl;
     cout << "+############################+" << endl;
     cout << "Tippen Sie anonymous ein, wenn Sie anonym anmelden wollen." << endl;
     cout << endl;
     cout << "Login." << endl;
     cout << "Vorname: ";
     cin.getline(usrid,20);
     cout << "Nachname: ";
     cin.getline(usrct,20);
     cout << "Login war erflogreich...(eingeloggt am <unbekannt>)" << endl;
     cout << endl;
     cout << "Willkommen zu Ferrox Multiplix." << endl;
     shell();
     prgend();
    }
    
    int prgend()
    {
     cout << "Vielen Dank fuer ihre Entscheidung." << endl;
     cout << "Bis zum naechten Mal." << endl;
     cout << "Unset [language (::german)]" << endl;
     cout << "Del [::Variables (all)]" << endl;
     cout << "Unload Kernel and Funktions." << endl;
     cout << "Uninitalizing Programm..." << endl;
     cout << "Press any key..." << endl;
     system("Pause");
    }
    
    int umrechn()
    {
     cout << "Hier kommt die Funktion umrechnen hin." << endl;
    }
    int nullst()
    {
     cout << "Nullst..." << endl;
    }
    
    int help()
    {
     cout << endl;
     cout << "Deutsche Hilfe zu Ferrox Multiplix(::std)" << endl;
     cout << "#######################################" << endl;
     cout << endl;
     cout << "+************************************************+" << endl;
     cout << "* 1 * cd..    * Eine Direktion zurück gehen          *" << endl;
     cout << "* 2 * umrechn * Umrechnungsmenue                     *" << endl;
     cout << "* 3 * nullst  * Nullstellenmenue                     *" << endl;
     cout << "* 4 * help    * Hilfe                                *" << endl;
     cout << "* 5 * credits * Mitwirkende                          *" << endl;
     cout << "* 6 * time    * Uhrzeit                              *" << endl;
     cout << "* 7 * pwd     * Aktuelle Direktion                   *" << endl;
     cout << "* 8 * end     * Ende                                 *" << endl;
     cout << "+************************************************+" << endl;
     cout << "Wenn Sie noch weitere Fragen haben, gucken Sie ein-" << endl;
     cout << "fach in die mitgelieferte Onlinedukomentation oder " << endl;
     cout << "den FAQ rein. Kontakt: DaniilKharlamov@gmx.de .    " << endl;
     cout << endl;
    }
    
    int credits()
    {
     cout << "Hier kommen die Credits hin..." << endl;
    }
    
    int shell()
    {
     while(strcmp(shellinpt,"end"))
      {
       //###################################
       //#Ab hier funktionier es nicht :-( #
       //###################################
       if(strcmp(shellinpt,"cd..")){cout << "Sie sind in Root, dem Haupverzeichniss..." << endl;}
       if(strcmp(shellinpt,"umrechn")){umrechn();}
       if(strcmp(shellinpt,"nullst")){nullst();}
       if(strcmp(shellinpt,"help")){help();}
       if(strcmp(shellinpt,"credits")){credits();}
       if(strcmp(shellinpt,"time")){cout << endl; cout << "Diese Funktion ist nicht in Version 2.5 verfuegbar..." << endl; cout << endl;}
       if(strcmp(shellinpt,"pwd")){cout << "Aktuelle Direktion: " << pwdint << endl;}
       else{cout << "Fehler (::Befehl oder Parameter), bitte versuchen Sie es nochmal!" << endl;}
    
      cout << "Hilfe? Tippen Sie <help> ein..." << endl;
      cout << usrid << "@" << usrct << ":#>" << pwdint;
      cin.getline(shellinpt, 20);
      //#################################
      //#bis hier Funktioniert nicht....#
      //#################################
     }
    }
    

    Kann mir jemand helfen?



  • Wie Du bereits schon selber festgestellt hast, gibt strcmp() bei Gleichheit der Strings 0 zurück. Also musst überprüfen, ob der Rückgabetyp 0 ist, wenn Du willst, dass bei Gleichheit ein bestimmter Code-Block ausgeführt wird. Soll heissen:

    [cpp]
    if(strcmp(shellinpt,"cd..")){cout << "Sie sind in Root, dem Haupverzeichniss..." << endl;}
    muss
    if(**!**strcmp(shellinpt,"cd..")){cout << "Sie sind in Root, dem Haupverzeichniss..." << endl;}
    heissen usw.
    [/cpp]



  • Danke...wenn das klappt, dann bin ich blücklich... 🙂 Lust am Opnesource Projekt? ==> http://www.dkharlamov.de.vu.
    Daniel



  • DaniilKharlamov schrieb:

    Danke...wenn das klappt, dann bin ich blücklich... 🙂 Lust am Opnesource Projekt? ==> http://www.dkharlamov.de.vu.
    Daniel

    Willst du nicht noch etwas mehr lernen über C(++) bevor du dich an ein Projekt ranwagst?? Ich hab übrigens Schwierigkeiten dein "Projekt" zu finden auf der Seite oder soll das "Projekt" der Quellcode sein, den man auf deiner Seite findet?



  • unter Informatik/Sourcecode innerhalb dieser Woche kommt ne neue Version raus... machr ich ja auch nebenbei....



  • Ich denke AJ hat wohl eher sowas wie eine Beschreibung deines Projektes vermisst.



  • @Entyl_Sa
    Ja so kann man das sagen.

    @DaniilKharlamov
    Es ist nicht gerade ersichtlich, dass das ein Open Source Projekt sein soll. Man sollte zumindest schon wissen was das genaue Ziel des ganzen ist und warum das ganze überhaupt so gemacht werden soll.



  • probiert doch einfach mal die Strings zu vergleichen, und nicht Char[]:

    #include <string.h> // oder ohne .h
    
    // und dann einfach die variable mit:
    
    string Variable "Zeichenkette";
    
    // initialisieren !
    


  • Ich bezweifle, dass das so funktioniert.

    Da fehlt noch namespace std; und die iostream. Außerdem fehlt das Zuweisungszeichen beim Initialisieren.



  • also, stimmt, der code wäre so fehlerhaft, meine Schuld, so ist es richtig:

    #include <string.h> // oder ohne .h
    #include <iostream.h>
    
    using namespace std;
    
    // und dann einfach die variable mit:
    
    string Variable "Zeichenkette";
    
    // initialisieren !
    

    nur so zu deiner Info, laut MSDN, muss man den string nicht mit "="
    initialisieren, man braucht bei string keinen Zuweisungsoperator !!!



  • Das kann gut sein, dass das die MSDN sagt. Allerdings sagt die MSDN viel wenn der Tag lang ist und es muss auch nicht immer dem Standard entsprechen, d. h. andere Compiler haben da vielleicht Probleme. Außerdem gibt es noch mehr als M$(DN). Da ich kein Standardfanatiker bin, kann ich dir nicht sagen, ob das nun vom Standard her erlaubt ist, aber ich finde es sieht falsch aus ohne Zuweisungsoperator und so wirds wahrscheinlich nicht nur mir gehen...


Anmelden zum Antworten