写一个循环来询问用户gpa,并在用户输入负值时,在搜索结束循环之前检查它是否为负数。匹配时,打印相应的学号;如果没有匹配,请打印“不匹配”。
我正在研究二进制搜索功能。我想编码以检查并停止输入负数并在输入gpa时打印学生数(或“未找到”)。
void search (double AVGgpa[][NUM_STUDENTS])
{
double gpa;
int first = 0,
last = NUM_STUDENTS - 1,
mid,
position = -1;
int row = 2;
bool found = false; // not found yet
cout << "Enter gpa(-1 to end): ";
cin >> gpa;
if (gpa==-1)
{
cout<<"You enter a nagative value"<<endl;
}
while (!found && first <= last)
{
mid = (first + last) / 2;
if (AVGgpa[row][mid]== gpa)
{
cout << "found at index " << mid << endl;
found = true;
}
else if (AVGgpa[row][mid]> gpa)
last = mid - 1;
else
first = mid + 1;
}
答案 0 :(得分:1)
假设您的数据正确并且数组按row
排序,您可能因浮动不准确而遇到麻烦。
请查看以下问题以获取详细信息:What is the most effective way for float and double comparison?
由此您可以使用比较函数,如:
bool doubleCompare(double d1, double d2)
{
static const double epsilon = 0.001; // Define this as needed
return std::fabs(d1 - d2) < epsilon;
}
如果不帮助您,则应检查输入数据和/或发布更多代码,因为您的二进制搜索对我来说没问题。