简单的C ++程序;似乎无法做对

时间:2016-09-01 18:49:44

标签: c++ if-statement char

#include<iostream>
#include<conio>
#include<string>

using namespace std;

class CompanyName
{
public:

    char name[10];

    void display()
    {
        if(name=="emily")
            cout<<"Hired!"<<endl;
    }
};

void main()
{
    CompanyName c;

    cout<<"enter name"<<endl;
    cin>>c.name;

    c.display();

    getch();
}

因此,我的朋友刚进入一家公司,我想用她的小型CPP计划在她的Facebook墙上祝贺她(并宣布某某某公司雇用她)。我不想只打印'祝贺艾米莉!'因为我已经做了别的事。所以这次只要查看代码就可以看到我想要做什么。任何更好的建议都非常受欢迎。 但我的问题是,我无法运行此代码。我觉得'if'线不对。有人可以帮我更正代码吗?我还是个初学者。

4 个答案:

答案 0 :(得分:2)

您将name声明为char name[10];,然后name将被视为指针。你的指针永远不会等于字符串"emily"

解决方案:强烈建议您只使用std::string

中的精彩#include <string>

这应该有效(因为你已经包含了库):

class CompanyName
{
public:
    std::string name;

    // ..
        if (name == "emily")
           // cout
    // ..
};

答案 1 :(得分:1)

您只能使用name运算符对==进行比较,因为它是char数组,您应该使用strcmp(name, "emily") == 0

更好的是,使用std::string类来存储和操作字符串std::string,您可以使用==运算符进行比较。

另一件事:您不应该使用getch(),因为它不是标准的c ++。

答案 2 :(得分:1)

您知道,如果您使用std::string,则此代码会更容易。请参阅以下代码:

#include <iostream>
#include <string>

using namespace std;

class CompanyName {
public:
    string name;

    void display()
    {
        if (name == "emily")
            cout << "Hired!" << endl;
    }
};

int main()
{
    CompanyName c;

    cout << "enter name" << endl;
    cin >> c.name;

    c.display();
    return 0;
}

然后这里对你的字符串大小没有限制。顺便说一句,你的代码不起作用,因为它只能包含9个字符+ \0,这意味着你的字符串太长了。使用上面的解决方案。 Live Example

答案 3 :(得分:1)

在C ++中直接将字符数组与字符串进行比较是不安全的。正如其他人所建议的那样,尝试使用std::string,它将为您处理所有背景资料。

这是一个使用您的类的析构函数的有趣示例:

#include<iostream>
#include<string>

using namespace std;

class CompanyName
{
public:
    std::string name;
    ~CompanyName()
    {
        if (name == "emily")
            cout << "Hired!" << endl;
        else cout << "Who's that?" << endl;
    }
};

int main()
{
    CompanyName c;
    cout << "Enter new employee name" << endl;
    cin >> c.name;
    return EXIT_SUCCESS;
}

在线编译:http://cpp.sh/433h7