strcmp



  • hallo.
    folgender code gibt immer die else-zeile aus, auch wenn ich das richtige passwort eingebe. irgendwie können die passwörter nicht miteinander verglichen werden. kann mir jemand helfen?

    /* bspl0040 */
    #include <stdio.h>
    #include <string.h>
    #define MAX 10
    
    main() {
      char geheim[10],passwort[80];
      int versuch=3;
      geheim[3]='p';
      geheim[2]=109;
      geheim[7]=114;
      geheim[5]=116;
      geheim[0]=67;
      geheim[9]='x';
      geheim[1]=111;
      geheim[8]='\0';
      geheim[4]=geheim[1]+6;
      geheim[6]=101;
      printf("\nSie haben 3 Versuche.\n");
      do {
        printf("\nBitte Passwort eingeben.\n>");
        fgets(passwort, MAX, stdin);
        if(strcmp(geheim,passwort) == 0) {
          printf("\nPasswort ok!\n");
          break;
        }
        else
          printf("\nFehlerhaftes Passwort! \n\a");
        versuch--;
      } while(versuch > 0);
    }
    


  • fgets speichert das Newline \n-Zeichen mit. Dieses musst du löschen

    fgets(passwort, MAX, stdin);
    char *del_new_line = strrchr(passwort, '\n');
    if(del_new_line) *del_new_line = 0;
    if(strcmp(geheim,passwort) == 0) ...
    


  • #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #define MAX 10
    
    int main() {
      char geheim[10],passwort[80];
      int versuch=3;
      geheim[3]='p';
      geheim[2]=109;
      geheim[7]=114;
      geheim[5]=116;
      geheim[0]=67;
      geheim[9]='x';
      geheim[1]=111;
      geheim[8]='\0';
      geheim[4]=geheim[1]+6;
      geheim[6]=101;
      printf("\nSie haben 3 Versuche.\n");
      do {
        printf("\nBitte Passwort eingeben.\n>");
        fgets(passwort, MAX, stdin);
        passwort[strlen(passwort)-1] = 0;  // <<
    	if(strcmp(geheim,passwort) == 0) {
          printf("\nPasswort ok!\n");
          break;
        }
        else
          printf("\nFehlerhaftes Passwort! \n\a");
        versuch--;
      } while(versuch > 0);
    }
    

    😉



  • Und was, wenn das Passwort 9 Zeichen lang ist und am strlen(passwort)-1 kein \n Zeichen sich befindet?


Anmelden zum Antworten