即使条件为真,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
永远不可能。
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
永远不可能。