c++ - 当用户输入 "m"时,为什么我的代码不能直接进入 if 主体

标签 c++ visual-c++

<分区>

我的代码无法正确比较 if 语句。当用户输入“m”时,它不会输出if body中的任何内容

int main()
{
    char name[50];
    char gender[50];
    int num_gender=0; //calculate the characters in gender
    cout<<"Please input your name ";
    cin>>name;
cout<<"Gender ";
    cout<<" (m=male f=female) ";
    cin>>gender;
    num_gender=strlen(gender);
    if(num_gender!=1)
  {
    cout<<"Please enter m or f only";
  }
  if(gender=="m" || gender=="f")
    {
        if(gender=="m")
        {
          cout<<"hello Mr."<<name<<endl;    
        }
        if( gender=="f" )
        cout<<"hello Ms."<<name<<endl;
    }

我希望输出将是 hello Mr. 或 hello Ms. 后跟输入的姓名而不是什么都没有

最佳答案

您可以使用operator== 比较string 对象。您不能以这种方式比较 char*char[],因为它在数字上比较指针,而不是字符串本身。由于编译器会为"m""f"gender保留三个不同的内存位置,gender=="m"gender=="f" 永远不可能为真。

要将 char*char[] 作为字符串进行比较,请使用 C 函数 strcmp

关于c++ - 当用户输入 "m"时,为什么我的代码不能直接进入 if 主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56421192/

相关文章:

C++实例化问题

c++ - C++ 中的 CDBException(错误)处理(VS2010、MFC、Excel/ODBC)

c - 如何在 Windows 上的 sqlite3 中启用全文搜索

c++ - 为什么使用复制构造函数而不是赋值运算符

c++ - 如何使用 malloc 从一维数组转换为二维数组

c++ - noexcept 的不同用途

C++ win32 设置光标位置

c++ - 视觉 C++ : InvokeHelper() function

C++将dll文件从根目录移动到子文件夹

c++ - 编译错误,对成员变量进行多重赋值的方法,模板类 C++