即使条件为真,Do While 循环也不会重​​复循环

Do While loop doesn't repeat loop even if conditions where true

 size_t pos = 0;
 int n;
 char c;

 string temp("x^3+4*x^)8");

 do
 {
      pos = temp.find('^',pos);

      /*code*/

      pos++;

  }while(pos <= temp.npos +1);
  //if temp.find didn't find '^' it will return npos (2^32)

它应该做的是在 temp 和 return 中找到 ^pos 的位置,执行一些代码并递增 pos ,如果条件为真,则重复循环。如果 pos <= temp.npos+1,则条件为真,即如果 temp.find() 在字符串中找不到任何 ^,它将从循环中断。

但是当我调试时,即使条件为真,调试器也会在退出前进入 do 循环。

编辑1

我所知道的是 npos = -1 但是在我的代码中,当我调试它时,它给了我一些别的东西。

npos + 1 可能会溢出(因为我相信它应该像 MAX_UINT)然后它(当然)比任何东西都小。

npos 定义为 size_t npos = -1;

npos + 1 导致溢出,而​​不是 2^64 它将是零。

如果您想这样做,我建议您检查 pos < temp.length()

修复: 此外,您应该在查找后立即检查 pos = temp.npos 并从循环中调用 break 以防止在没有找到时处理位置。

npos 是最大的无符号整数。 npos + 1 为零且 pos >= 0。如果 temp.find() returns index 0.

则循环将重复

您可以将循环更改为

do {
    pos = temp.find('^',pos);

    /*code*/

    pos++;
} while(pos != temp.npos);

因为 pos > temp.npos 永远不可能。