两个字符串之间的比较不起作用
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 ){
我正在写一个菜单,我尝试用一个字符串来选择一个选项。按照我的程序的相关部分:
#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 ){