为什么字符串比较会导致无限循环

时间:2019-03-28 00:03:26

标签: c++

我有一个飞机的实体类,例如:

class Plane{
private:
    string tailNumber;
public:
    void setTail(string tail);
    string getTail();
}

和一个飞机的收集类,例如:

class Planes{
public:
    void addPlane();
    void printDetails();
    void printAllPlanes();
private:
    vector<Plane> currentPlane;
}

addPlane定义:

void Planes::addPlane(){
    Plane a;
    string temp;
    cout << "Enter tail:";
    getline(cin, temp);
    a.setTail(temp);
    currentPlane.push_back(a);
}

我的printDetails定义:

void Planes::printDetails()
{
cout << "Enter Plane's Tail Number: ";
        getline(cin, tail);
        cin.ignore();

        for (unsigned int i = 0; i < currentPlane.size(); i++)
        {
            if (currentPlane[i].getTailNumber() == tail)
            {
//print tail number by calling accessor function}
}
else
{
cout << "Error.";
}
}

和我的主要班级:

int main(){
    Plane a;
    int userChoice;
    do{
        cout << "1.Add Plane";
        cout << "2.Print All Planes";
        cout << "3.Print a plane";
        cout << "4.Quit";
        cin >> userChoice;
        if (userChoice == 1)
            a.addPlane();
        else if (userChoice == 2)
            a.printAllPlanes();
        else if (userChoice == 3)
            a.printDetails();
    }while (userChoice != 4);
    return 0;
}

我成功添加了一个新对象并打印了矢量中的所有对象以进行显示。问题是如果我的尾号是:“ TGA”,则运行currentPlane [0] .getTail()返回“ TGA”。但是,当将用户输入变量tail =“ TGA”与currentPlane [0] .getTail()=“ TGA”进行比较时,由于某些我不了解的原因(因为这是一个简单的字符串比较?)。

如果我仅输入整数值(例如“ 12345”),则它将跳转到else分支,而不是无限循环。如果输入任何字母数字值,则无限循环将再次出现。 你能帮我吗?

1 个答案:

答案 0 :(得分:2)

与字符串比较无关,代码的问题绝不是您设置变量userChoice

大概你打算在类似的地方写一些代码

cin >> userChoice;

但是您没有那样的东西,因此程序的行为是不确定的。

您确实应该有一个编译器警告,告诉您您正在使用未初始化的变量。请注意编译器警告,并修复所有警告。