我有一个飞机的实体类,例如:
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分支,而不是无限循环。如果输入任何字母数字值,则无限循环将再次出现。 你能帮我吗?
答案 0 :(得分:2)
与字符串比较无关,代码的问题绝不是您设置变量userChoice
。
大概你打算在类似的地方写一些代码
cin >> userChoice;
但是您没有那样的东西,因此程序的行为是不确定的。
您确实应该有一个编译器警告,告诉您您正在使用未初始化的变量。请注意编译器警告,并修复所有警告。