在 C 中正确比较字符串

标签 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);

我知道我可以做一个整数选择输入,但如果可能的话我想稍后再利用它。

到目前为止,程序将我的性别值比较称为“错误”,这很好,但我不知道下一步该做什么,我可以找到一个比较字符串的函数,但我真的不想让我的程序过于复杂代码。

编辑:重复?,真的吗?,给出的例子甚至不能帮助我。

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

最佳答案

您使用 strcmp比较字符串。使用比较运算符 == 只是比较指针

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

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


您可以使用例如scanf改为将输入读取为单个字符,并使用例如tolower (或 toupper )以获得不区分大小写的比较。

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

关于在 C 中正确比较字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27146825/

相关文章:

c - 双重赋值/if 谓词是否可能? C

C 编程为什么在值之前打印垃圾?

c++ - 运行目标对于运行方案 Xcode 无效

java - 忽略文件中以 "#"登录 Java 开头的行

c++ - 在没有条件 IF 语句的情况下查找数字的最大值 C++

Javascript:在嵌套函数中使用条件语句停止代码执行

r - 人口普查,由出生在同一地点的夫妇(有或没有 child )组成的家庭(dplyr 方式)

c - 在 C 主参数中使用 long** 而不是 char**

java - 从 JFrame 获取字符串值到 Java 类

Javascript 字符串验证问题