Strings mit if überprüfen - Bin C-Anfänger



  • Hallo,

    habe gestern mit C angefangen und würde gerne Wissen wie ich Strings in If-Abfragen überprüfe, habe das hier einfach mal so gemacht (wie ich es aus PHP kenne):

    if(string == "exit")
    

    Das scheint nur nicht zu funktionieren oder ich habe woanders ein Fehler gemacht Jedenfalls wird auch bei Eingabe von exit die schleife nicht abgebrochen. hab online leider keine lösung gefunden.

    Vielen Dank im Voraus.

    #include <stdio.h>
    #include <conio.h>
    
    int main()
    {
    char string[64];
    while(1) {
    printf("Eingabe:\n");
    gets(string);
    if(string == "exit") break;
    }
    return 0;
    }
    


  • vergleiche werden mit strcmp() gemacht.



  • C-Strings ('\0'-terminierte Zeichenketten) vergleicht man in C mit ➡ strcmp( ) und Konsorten:

    #include <stdio.h>
    // #include <conio.h> wofür, ist kein ANSI-C!
    #include <string.h>
    
    int main()
    {
        char string[ 64 ];
    
        do {
            printf( "Eingabe:\n" );
    
            // gets( string );  ist gefährlich, du willst sicher:
    
            fgets( string, 63, stdin )
    
            // fgets hinterlässt ein '\n', welches wir entfernen sollten:
    
            if( string[ strlen( string ) - 1 ] == '\n' ) {
    
                string[ strlen( string ) - 1 ] = '\0';
            }
    
        } while( strcmp( string, "exit" ) );
    
        // return 0;  Kannst dir sparen, da main( ) laut Standard 0 (Null) zurückgibt, wenn es nichts zurückgibt.
    }
    

    Greetz, Swordfish



  • Hui Super Danke, dass muss ich mir erstmal ne weile angucken 😃



  • Kann ich das Ganze auch irgendwie als switch() mit default-Wert realisieren???
    Also je nach Eingabe wird ein andrer Text ausgegeben..

    while(1) { 
    ...
    ...
    if(!strcmp(string,"exit")) break;
    else 
    // Hier dann ein switch um andere eingaben zu überprüfen 
    // z.B:
    // switch(string) {
    // case "text1": printf("Ausgabe");
    // case "text2": printf("Eine Andre Ausgabe");
    // default: printf("Unbekannte Eingabe");
    // }
    }
    


  • man kann mit switch-anweisungen keine strings vergleichen nur einzelne buchstaben oder zahlen...



  • leider nicht. 'case' geht nur mit festen zahlenwerten. du kannst z.b. alle strings, die du erwartest, in ein char* array packen und dann eine funktion basteln, die dir 'nen index in dieses array zurückgibt wenn der string gefunden wurde.



  • ...habe gestern mit C angefangen...

    ich glaube das wird ihm aufgrund dieser tatsache ueberfordern 🙂

    edit: ein uebler rechtschreibfehler...



  • Allerdings 😃
    PHP war wesentlich leichter zu lernen 😛
    Hab das jetzt so gemacht, trotzdem danke

    if(!strcmp(string,"exit")) break; 
    else if(!strcmp(string,"text1")) printf("Ausgabe1\n"); 
    else if(!strcmp(string,"text2")) printf("Ausgabe2\n"); 
    else printf("Default\n");
    


  • Moh schrieb:

    ...habe gestern mit C angefangen...

    ich glaube das wird ihn aufgrund dieser tatsache ueberfordern 🙂

    na, aber dafür macht er doch gute fortschritte...



  • Ei schrieb:

    Hab das jetzt so gemacht, trotzdem danke

    if(!strcmp(string,"exit")) break; 
    else if(!strcmp(string,"text1")) printf("Ausgabe1\n"); 
    else if(!strcmp(string,"text2")) printf("Ausgabe2\n"); 
    else printf("Default\n");
    

    Yep, das if/else Konstrukt ist auch der typische Workaround für String Switches.



  • net schrieb:

    na, aber dafür macht er doch gute fortschritte...

    Wenn er auch alles versteht, was er codet!?

    Greetz, Swordfish


Log in to reply