c++ - 有没有办法解决使用 break 语句的问题?

标签 c++ if-statement break binary-search

我有一个有效的二进制搜索功能,要求用户输入一个名字,它会在学生数组结构中搜索它并显示该学生相应的平均 GPA。除非用户输入句点,否则它会一直循环让用户输入要搜索的名称。

我遇到的问题是我正在使用的 break 语句。我需要遵循的此函数的要求不允许我使用 break 语句。

但是,如果我删除 break 语句,我的二分搜索将无限地打印出输出语句并且将不再正常工作。

有没有办法解决这个问题而不使用 break 语句?我有一种感觉,我可以使用多个 if 语句来代替 break 语句。

void binarySearch(Student* ptr, int MAXSIZE)
{
   string target;
   string period = ".";

   int first = 0,
   last = MAXSIZE - 1,
   mid;

  do
  {
    cout << "Enter student name (Enter . to stop): ";
    cin  >> target;

    while (first <= last)
    {
        mid = (first + last) / 2;
        if (ptr[mid].name.compare(target) == 0)
        {
            cout << "Student " << target << " :gpa " << ptr[mid].avg << endl;
            first = 0;
            last = MAXSIZE - 1;
            break; // I am stuck on making the binary search work without using this break statement
        }
        else if (ptr[mid].name.compare(target) < 0)
            last = mid - 1;
        else
            first = mid + 1;
    }
    if (first > last && target.compare(period) != 0)
    {
        cout << "This student was not found. Enter another name" << endl;
        first = 0;
        last = MAXSIZE - 1;
    }
  } while (target.compare(period) != 0);
}

最佳答案

在你的循环中引入一个bool!

bool nameFound = false;
while (first <= last && !nameFound)
{
    mid = (first + last) / 2;
    if (ptr[mid].name.compare(target) == 0)
    {
        cout << "Student " << target << " :gpa " << ptr[mid].avg << endl;
        first = 0;
        last = MAXSIZE - 1;
        nameFound= true;
    }
    ...
}

关于c++ - 有没有办法解决使用 break 语句的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35121683/

相关文章:

c++ - 如何通过 Crypto++ 和 RSA 对文件进行签名

c++ - std::mem_fn 与 hand-rolled 仿函数相比的缺陷

c++ - 如何在 int 输入失败时跳出循环

jquery - 错误循环遍历循环并在满足条件时中断

java - 如何在java程序中根据用户输入继续循环

c++ - 如何将 Boost 数量数组类型化为基础类型?

c++ - 将 C++ 枚举映射为 const char*

javascript - 检测移动设备

java - 在另一个 if 语句中使用 if 语句的结果

MySQL UPDATE 多个 IF 条件