即使比较在相同的字符串之间,strcmp()也会返回错误的值

Iva*_*ich 2 c++ string if-statement strcmp

#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;

int main()
{
    string x;
    cin>>x;

    if(strcmp(&x.at(0), "M") == 0)
    {
        cout<<"midget ";
    }
    else if(strcmp(&x.at(0), "J") == 0)
    {
        cout<<"junior ";
    }
    else if(strcmp(&x.at(0), "S") == 0)
    {
        cout<<"senior ";
    }
    else
    {
        cout<<"invalid code";
    }

    if(strcmp(&x.at(1), "B") == 0)
    {
        cout<<"boys";
    }
    else
    {
        cout<<"girls";
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我已经使用上面的代码来比较MB应该返回"侏儒男孩",但它继续下降到其他并返回"无效的codeboys".不知何故第二个条件正常.我的诊断告诉我,在第一次比较它返回66.我猜这是"M"的ASCII代码.但是我现在如何解决我的问题呢?

Moh*_*awi 6

strcmp期望比较两个以null结尾的字符串.它将开始比较每个字符串的第一个字符.如果它们彼此相等,则继续使用以下对,直到字符不同或直到达到终止空字符.

你想比较两个字符.试试这个:

if(x.at(0) == 'M')
...
Run Code Online (Sandbox Code Playgroud)