在C中正确比较字符串

It'*_*Men 0 c string if-statement

我必须创建一个程序,其中输入必须是2个值之一,'M'或'F'.

这是我创建的用于演示的程序段

do
{

     printf("What is your Gender? (M for Male - F for Female) "); 
     fgets(GenderValue, 16, stdin); 

     if (GenderValue[0] == '\n') 
     {
           printf("Try again");
           getch();
           system("cls");
           loop=1;
     }
     else
     {
           loop = -1;
     }
     if (GenderValue == "M");
     {
          loop =-1;
     }
     else if(GenderValue == "F");
     {
          loop=-1;
     }

     else
     {
           printf("Try again");
           getch();
           system("cls");
           loop=1;
     }



 }
 while(loop > 0); //Checks for NULL input

 printf("Gender: %s",GenderValue);
Run Code Online (Sandbox Code Playgroud)

我知道我可以做一个整数选择输入,但如果可能的话我想稍后回收它.

到目前为止,该程序调用我的性别值比较"错误",这很好,除了我不知道下一步该做什么,我可以找到一个比较字符串的函数,但我真的不想让我的代码复杂化.

编辑:复制?,真的吗?,给出的例子甚至没有接近帮助我.

编辑2:发现问题,我有;在我的if语句旁边,现在已修复.但说真的,没有人发现这个?

Som*_*ude 6

strcmp用来比较字符串.使用比较运算符==只是比较指针.

但请注意,这fgets将在字符串中留下结尾换行符,因此您需要与eg进行比较"M\n",或者删除换行符(如果有的话).

另外请注意,scrcmp区分大小写,字符串"M"不等于字符串"m".


您可以使用eg scanf来将输入读作单个字符,并使用eg tolower(或toupper)来获得不区分大小写的比较.

但是,使用scanf会带来其他问题,特别是如果您之后再次使用它来阅读另一个单个字符.这样做的原因是Scanf将换行符留在输入缓冲区中,导致可能的下一次scanf调用"%c"格式为读取换行符.有一个非常简单的解决方案:使用,告诉scanf读取和丢弃前导空格" %c".