两个字符串之间的比较不起作用

Comparisons between two strings don't work

我正在写一个菜单,我尝试用一​​个字符串来选择一个选项。按照我的程序的相关部分:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "pendu.h"

int main()
{
    char choix_utilisateur[100];

    printf("Choisissez votre douleur :\n");
    printf("- > Mastermind\n");
    printf("- > Pierre Feuille Ciseaux\n");
    printf("- > Juste Prix\n");
    printf("- > Pendu\n");

    fflush(stdin);
    fgets(choix_utilisateur, 100, stdin);
    printf("%s\n", choix_utilisateur);

    if(!strcmp(choix_utilisateur, "toto")){
        printf("- > Mastermind\n");
    }
    else if(!strcmp(choix_utilisateur, "Pierre Feuille Ciseaux")) {
        printf("- > Pierre Feuille Ciseaux\n");
    }
    else if(!strcmp(choix_utilisateur, "Juste Prix")) {
        printf("- > Juste Prix\n");
    }
    else if(!strcmp(choix_utilisateur, "Pendu")) {
        pendu();
    }
    else {
        printf("Ecris autre chose\n");
    }

    return 0;
}

这里,我写Pendu的时候,程序select the else without go in the :

else if(!strcmp(choix_utilisateur, "Pendu")) {
        pendu();
    }

通过一些测试,我发现 strcmp 没有像预期的那样工作,并且 return 1 strcmp(choix_utilisateur, "Pendu")choix_utilisateur = "Pendu"(我验证过,value 变量在 fgets 中取了好的值)。我也尝试使用 char tab[] = "Pendu" 但它也不起作用。

你知道这个问题吗?提前致谢。

对于初学者来说,这个电话

fflush(stdin);

有未定义的行为。

函数fgets可以在输入的字符串后附加换行符'\n'。您需要将其删除。例如

choix_utilisateur[ strcspn( choix_utilisateur, "\n" ) ] = '[=11=]';

注意 if 语句中的条件将更具可读性 if for example 而不是这个条件

if(!strcmp(choix_utilisateur, "toto")){

if( strcmp(choix_utilisateur, "toto") == 0 ){