简单的C++程序;似乎做不好

Simple C++ programme; can't seem to get it right

本文关键字:C++ 程序 简单      更新时间:2023-10-16
#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墙上祝贺她(并宣布某某公司雇用了她)。我不想只写"祝贺你,艾米丽!"因为我已经为别的事情这么做了。这次你看一下代码就知道我要做什么了。欢迎提出更好的建议。但我的问题是,我无法让这段代码运行。我觉得"如果"这条线不对。有人能帮我改一下代码吗?我还是个初学者。

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

解决方案:强烈建议直接使用#include <string> 中的std::string

这应该可以工作(因为您已经包含了库):

class CompanyName
{
public:
    std::string name;
    // ..
        if (name == "emily")
           // cout
    // ..
};

你知道,如果你使用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个字符,+ ,这意味着你的字符串太长了。使用上面的解决方案。<<kbd>生活例子/kbd>

您不能仅使用==运算符来比较name,因为它是char数组,您应该使用strcmp(name, "emily") == 0

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

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

在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