gpt4 book ai didi

c++ - 字符串不能用空格? C++

转载 作者:太空狗 更新时间:2023-10-29 19:54:44 24 4
gpt4 key购买 nike

基本上我正在试验多态性。我有 2 个对象,一个客户和一个员工。客户有姓名和投诉。员工有姓名和薪水。

在一个循环中,我接受这些参数并创建一个新的 Person 以添加到数组中。

但这是我的问题:如果我在字符串中放置任何空格,循环就会跑到最后。

Person *persons[10];

for (int i = 0; i < sizeof persons;i++)
{
cout<<"Please type 1 for customer or 2 for Employee"<<endl;
int q;
cin>>q;
string name;
int salary;
string complaint;


if (q == 1)
{
cout<<"What is your name?"<<endl;
cin>>name;
cout<<"What is your complaint"<<endl;
cin>>complaint;

personPtr = new Customer(name,complaint);
cout<<"Created customer"<<endl<<endl;
persons[i] = personPtr;
cout<< "added to array"<<endl<<endl;
}
else if(q==2)
{
cout<<"What is your name?"<<endl;
cin>>name;
cout<<"What is your salary"<<endl;
cin>>salary;
personPtr = new Employee(name,salary);
persons[i] = personPtr;
}
else
{
cout<<"Sorry but i could not understand your input. Please try again"<<endl;
i--;
cin>>q;
}
}
delete personPtr;
system("PAUSE");

有什么特殊的方式来包含字符串吗?

这里有客户类和员工类供引用。

class Person
{
public:
Person(const string n)
{name = n;}; // initialise the name
virtual void printName();
protected:
string name;
};


class Customer:public Person
{
public:
string complaint;

Customer(string name, string cm)
:Person(name)
{
complaint=cm;
}
virtual void printName();
};

class Employee:public Person
{
public:
int salary;

Employee(string name,int sl)
:Person(name)
{
salary = sl;
}
virtual void printName();
};

最佳答案

  1. 输入操作符

    std::istream& operator>>(std::istream& is, std::string&)

    只会读取输入直到下一个空白字符。 (这正是 25 年前 Jerry Schwartz 发明 IO 流时指定的方式。)如果您需要阅读整行 ,那么

    std::istream& getline(std::istream&, std::string&, char='\n')

    是你需要使用的:

    std::string name;
    std::getline(std::cin, name);
  2. 输入可能会失败。例如,读取 int 可能会失败,因为输入缓冲区中只有非数字数字。如果流操作失败,将在流中设置状态位。失败后,流将不会执行任何进一步的操作。 >>> 的操作数将保持不变。
    因此在使用数据之前,您需要检查您的输入操作是否成功。最简单的方法是在输入操作后检查流:

    if(!std::cin) {
    // input failed
    }

关于c++ - 字符串不能用空格? C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4992229/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com