void InputStatisticalData()
{
//variables declaration
cout << "n[Here to take in data]" << endl;
//cin data
while (exit == false)
{
cout << "Entered Loop" << endl;//for troubleshooting purpose
cout << "CountCheck: " << countcheck << endl;//for troubleshooting purpose
if (!Vector.empty())
{
cout << "Entered Vector check IF" << endl;//for troubleshooting purpose
if (condition)//checks if data has any duplicates
{
cout << "nData already exist, please enter a new set of data." << endl;
break;
}
else
{
cout << "Entered countcheck++" << endl;//for troubleshooting purpose
countcheck++;
}
}
else
{
//stores data
exit = true;
}
}
}
大家好,上面是我的函数,用于接收一些数据并将它们存储到对象中,然后再存储到向量中。一切正常,因此我决定对该函数进行一些验证检查。其中 1 是检查数据是否键入,之前是否已经键入。
我可以存储一次数据,仅此而已,一旦我尝试再次存储它,它将进入无限循环并给我一个分段错误。我已经尝试解决了一个星期,但无济于事。
另一个无限循环是cin.fail。如果检测到错误的输入,它也会进入无限循环。
感谢您抽出宝贵时间查看。
哈哈,为什么要继续投反对票我的问题,有一个问题和一个解决方案,它应该帮助别人,所以停止投反对票并投赞成票
您正在处理无限循环,因为在迭代结束时不会重置错误标志。
在尝试任何其他操作之前,您应该执行 cin.clear() 重置故障位:
if(cin.fail())
{
cin.clear();
cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n'); //skip bad input
...
}
在第二个循环中,检查数据向量是否为空。如果它不为空(第二个条目)并且您的数据是新的,它将无限期地落在增加countcheck
的 else 语句中。
可能会发生两种情况:无限循环或分段错误(越界异常)。
您应该检查上限,例如:
if(countcheck > Vector.size())
{
//This data is new
PTD.setLD(LD);
Vector.push_back (PTD);
cout << "nRecord stored successfully, returning back to main menu." << endl;
exit = true;
}
else if(Vector[countcheck].getX() == MainX &&
...
}
您也可以改用for statement
:
for(countcheck = 0; countcheck < Vector.size(); countcheck ++)
{
if(Vector[countcheck].getX() == MainX && ...)
{
...
exit = true;
break;
}
}
//New element
if(countercheck == Vector.size())
{
PTD.setLD(LD);
Vector.push_back (PTD);
cout << "nRecord stored successfully, returning back to main menu." << endl;
exit = true;
}