String in if-Bedingung



  • Ich habe mir das so vorgestellt :

    int main()
    {
     do { 
        fflush(stdin);
        char eingabe[99];
        printf("Wie lautet ihre Eingabe?\n");
        scanf ( "%98s" , eingabe );
        printf ("\n%s", eingabe);
    
        if ( eingabe == "help" )
        { system("help");
    }
        else 
        { 
             printf("\nungueltige Eingabe!");
        }
        system("pause");    
    }
    while (1 > 0);
    
      return 0;
    }
    

    klappt aber nicht kommt immer else


  • Mod

    Du suchst strcmp.



  • Strings kannst du in C nicht so vergleichen. Was du hier wirklich vergleichst, ist die Addresse zweier Strings, also der Ort, wo diese im Speicher liegen. Wie SeppJ schon sagte, nimmt man dafür die Funktion strcmp.



  • Ich habs jetzt so versucht:

    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
     do { 
        fflush(stdin);
        char eingabe[99];
        char e2[99] = "help";
        printf("Wie lautet ihre Eingabe?\n");
        scanf ( "%98s" , eingabe );
        printf ("\nIhre Eingabe lautet: %s", eingabe);
        system("pause");
        int e3 = strcmp( eingabe , e2 );
        printf ("%d" , &e3);
    
        if ( eingabe[1] == 1 )
        { system("help");
    }
        else 
        { 
             printf("\nungueltige Eingabe!\n");
        }
        system("pause");    
    }
    while (1 > 0);
    
      return 0;
    }
    

    kein erfolg

    zeile 16 sollte bei übereinstimmung also bei eingabe von help 0 ausgeben


  • Mod

    Was soll Zeile 18 machen? Soll es prüfen, ob das erste Zeichen der Eingabe '1' ist? Das wäre dann eingabe[0]=='1' . Aus dieser Antwort darfst du viel über Arrays und Zeichen lernen.

    Und was treibst du da mit dem strcmp? Meinst du das Programm wird magisch richtig, weil du irgendwo mittendrin ein strcmp hast?

    Und guck dir nochaml an, wie printf funktioniert. So jedenfalls nicht. Und schalt auch mal volle Warnungen beim Compiler an, das vermeidet solche Fehler.

    Und insgesamt muss ich mal zitieren:

    c.rackwitz schrieb:

    Wenn du selber Code schreibst, musst du ihn auch verstehen. Code ist kein Haufen von wahllos zusammengeschmissenen Buchstaben und Zeichen, Code ist Logik pur. Du musst genau wissen, warum du wo und welches Zeichen setzt.



  • der if teil ist überflüssig hab ich vergessen rauszumachen

    ich möchte praktisch ein Programm, welches je nach Benutzereingaben etwas anderes macht.

    PS: das printf funktioniert bei mir einwandfrei



  • Nochmal:
    Nimm dein/ein C-Tutorial und mach dir den Unterschied zwischen 1 , '1' und "1" klar.

    Und wenn du das schon unbedingt machen willst,
    nimm statt while (1 > 0); besser
    while (1); oder for(;; ) ;
    Das sind die üblichen Endlosschleifen.

    arcanis schrieb:

    PS: das printf funktioniert bei mir einwandfrei

    Das printf aus Zeile 16? Sicher? Was kommt da denn raus?



  • Du versuchst mit mehreren untauglichen Mitteln, deine Eingabepufferprobleme zu lösen.
    So könnte es gehen:

    int main()
    { int e3;
     do {
        /*fflush(stdin);*/ /* Müll, weg mit dem Zeugs */
        char eingabe[99];
        char e2[99] = "help";
        printf("Wie lautet ihre Eingabe?\n");
        scanf ( "%98[^\n]" , eingabe );while('\n'!=getchar());
        printf ("\nIhre Eingabe lautet: %s", eingabe);
        e3 = strcmp( eingabe , e2 );
        printf ("%d" , &e3); /* <-- UB, weil printf hier intern versucht (versuchen muss!), einen Zeigerwert einem int-Wert zuzuweisen */
        if ( e3 )
        { system("help");
    }
        else
        {
             printf("\nungueltige Eingabe!\n");
        }
    }
    while (e3);
    
      return 0;
    }
    


  • printf ("%d" , &e3);
    

    damit gibst du die adresse der variable e3 aus, aber nicht ihren wert,
    d.h. völlig egal was strcmp zurückgibt, mit dieser printf anweisung bekommst du den rückgabewert von strcmp nicht zu sehen.



  • Ich glaub ich hab mich schlecht ausgedrückt

    ich möchte wenn der benutzer help eingibt
    system("help") ausführen

    @wutz
    dein vorschlag gibt immer system("help") aus

    @bigbrother
    warum wieso weshalb?



  • der, die, das, wer, wie, was... http://www.youtube.com/watch?v=GTKDM8UzOhA ... *scnr*
    jaa, äähm.. wegen dem adress-operator.
    http://www.imb-jena.de/~gmueller/kurse/c_c++/c_operad.html

    arcanis schrieb:

    Ich glaub ich hab mich schlecht ausgedrückt
    ich möchte wenn der benutzer help eingibt
    system("help") ausführen

    dafür musst du dich erstmal schlau machen, was strcmp für rückgabewerte liefert.
    am anfang vllt. etwas ungewohnt, aber strcmp gibt 0 zurück, wenn die übergebenen strings gleich sind.
    http://www.cplusplus.com/reference/clibrary/cstring/strcmp/



  • arcanis schrieb:

    @bigbrother
    warum wieso weshalb?

    Weil & der Adressoperator ist. Der gibt die Adresse von der Variablen zurück.

    Da strcmp() bei Gleichheit eine 0 zurückgibt muss es auch

    if ( !e3 )
        { system("help");
    

    heissen.


Log in to reply