【问题标题】:C Program Printing Wrong Message | Logical Operator Problem?C 程序打印错误信息 |逻辑运算符问题?
【发布时间】:2020-02-16 14:59:00
【问题描述】:

我是 C 编码的新手,并尝试编写一个程序,如果您的年龄为 15 岁或以上,并且您的性别等于男性,则该程序会打印“您可以进入”消息。请看看我在下面得到了什么。当您输入您的年龄为 15 岁或以上且您的性别为男性时,程序会打印错误消息。我认为这可能是我的逻辑运算符的问题,但我不太明白为什么。你能帮忙吗?

#include <stdio.h>
#include <unistd.h>

int main(void) 
{
    int age;
    char gen;

    printf("How old are you?\n");
    scanf("%d", &age);

    printf("What is your gender? (m/f) \n");
    scanf("%s", &gen);

    if(age >= 15 && gen == 'm')
    {
         write(1, "You man enter\n", 15);
    }

    if(age < 14 || gen == 'f')
    {
        write(1, "No entry\n", 9);
    }

    return 0;
}

【问题讨论】:

    标签: c


    【解决方案1】:

    改变这个:

    scanf("%s", &gen);
    

    到这里:

    scanf(" %c", &gen);
    

    因为gen 是一个字符,而不是一个字符串。

    请注意我在字符格式说明符之前留下的空格,用于通知该方法自动吃掉空格和特殊字符(删除它,看看会发生什么)。欲了解更多信息,请准备好我对此Caution when reading char with scanf (C) 的初步反应。

    【讨论】:

      【解决方案2】:

      谢谢@gsamaras!

      #include <stdio.h>
      #include <unistd.h>
      
      int main(void)
      {
          int age;
          char gen;
      
          printf("How old are you?\n");
          scanf("%d", &age); 
      
          printf("What is your gender? (m/f) \n");
          scanf(" %c", &gen);
      
          if(age >= 15 && gen == 'm')
          {
               write(1, "You may enter\n", 15);
          }
      
          if(age <= 14 || gen == 'f')
          {
              write(1, "No entry\n", 9);
          }
      
          return 0;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-25
        • 1970-01-01
        • 1970-01-01
        • 2021-12-21
        相关资源
        最近更新 更多